【发布时间】:2012-07-18 19:46:11
【问题描述】:
我正在尝试编写一个运行单个任意过程的 sql*plus 脚本。棘手的部分是我希望能够运行该过程,而不管该过程需要多少参数。
为了找出过程的正确参数数量,我正在执行以下操作:
SELECT COUNT(*) INTO v_in
FROM all_arguments
WHERE LOWER(owner) = LOWER(v_schema)
AND LOWER(package_name) = LOWER(v_package)
AND LOWER(object_name) = LOWER(v_proc)
AND in_out = 'IN';
当需要构建立即执行字符串时,我想使用某种循环来做到这一点。传入的参数都只是编号,从 &1 到 &n。
FOR i IN 1..v_in
LOOP
v_block := v_block || '''' || &i || '''';
IF i != v_in THEN
v_block := v_block || ',';
END IF;
END LOOP;
但这不起作用。它看到 &i 并且当然认为它是一个名为 i 的参数,并且由于调度应用程序(Appworx ... ugh)没有运行定义 i=something,因此失败得很惨。
有没有办法在这方面做间接,这样我就可以迭代,但是对于给定的过程有很多碰巧是正确的?
【问题讨论】:
-
从 &i 中删除 & ?这只是一个变量,对吧?
-
是的,但是我需要(在循环中)添加第 4 个参数,然后是第 5 个参数,然后是第 6 个参数,依此类推,直到我获取了该脚本的所有参数文件。我需要扩展为 &4 和 &5 等的东西。