CREATE PACKAGE BODY ABC IS
PROCEDURE ABC AS
BEGIN
FOR C IN
SELECT SPMC||'('||CSMC||')' a FROM A;
-- SPMC 过程名称,CSMC 参数名称
-- 如 a=ABC.ABC(ID)
LOOP
...
...
END LOOP;
END;
END;想要将游标里的字段a执行出来?
PROCEDURE ABC AS
BEGIN
FOR C IN
SELECT SPMC||'('||CSMC||')' a FROM A;
-- SPMC 过程名称,CSMC 参数名称
-- 如 a=ABC.ABC(ID)
LOOP
...
...
END LOOP;
END;
END;想要将游标里的字段a执行出来?
解决方案 »
- 请教DBMS_METADATA.GET_DDL报错 error stack
- 求选了所有课程的学生名单
- C#链接Oracle数据库以及tnsnames.ora文件的问题
- oracle sum问题 在线急等
- 如何使用Oracle的DBLink访问MySql表中的Blob字段
- 请教如何查询nvarchar2中的汉字?
- oracle 备份和恢复数据时,怎么样知道是成功还是败?
- 一个ORACLE的SQL错误?
- Oracle8.0.5(for nt)有没有和MSSQL2000类似的显示预定的执行计划(查询成本)?
- 开发过程中每次数据库都得导入导出?
- oracle中关于orader by的问题,高手进!!
- oracle 中 select count(id) 速度很慢 要17秒 表数据量100万
--给你一个例子:
--过程中动态调用过程:CREATE OR REPLACE PROCEDURE p_test(rs OUT NUMBER )
IS
BEGIN
SELECT Count(1) INTO rs FROM emp;
END;
/CREATE OR REPLACE PROCEDURE test_main
IS
v_rs NUMBER;
BEGIN
EXECUTE IMMEDIATE 'begin p_test(:v_rs); end;' USING OUT v_rs;
Dbms_Output.put_line('rs='||v_rs);
END;
/EXEC test_main;
或者:
BEGIN
test_main;
END;
呵呵,一般都是你说的这样,只是今天我有个案子就是要动态调用的,麻烦
[/Quote]我要实现的就是:第一个过程要通过输入的参数运行出不同的结果;
第二个过程通过游标查到过程名和相应的参数名,然后执行,数据在百行左右。
这样是必须要动态调用么?
--第一个过程要通过输入的参数运行出不同的结果,像这样吗?
CREATE OR REPLACE PROCEDURE GetInfo (table_name in varchar2,rs out sys_refcursor)
AS
BEGIN
OPEN rs FOR 'select * from '||table_name||' where rownum=1'; --动态游标获取结果集
END;
/
--第二个过程通过游标查到过程名和相应的参数名,然后执行
--这样也是可以的,就是不知道你如何去查到GetInfo过程?是通过参数去查的吗?
--不管你怎么样,要获取GetInfo 的结果就要用动态游标来读取
/
EXECUTE IMMEDIATE 'begin p_test(:v_rs); end;' USING OUT v_rs;你这样的我没试过,我是直接把查到的拼接的结果放到动态SQL里了
EXECUTE IMMEDIATE V_SQL
就报错了。
你告诉我是什么原因么?
你应该要这样:
EXECUTE IMMEDIATE 'begin '||过程名||'('||参数||'); end;' using out 参数;
这是什么错误?