日期:2014-05-17  浏览次数:21120 次

oracle存储过程如何输出结果集
SQL code
create or replace procedure sp_test1
(
DWMC in VARCHAR2, 
LX in VARCHAR2
)
IS
v_sql VARCHAR2(1000);
begin
  v_sql := 'select * from test_table where dwmc:='+DWMC+' and lx:='+LX+'';
  execute immediate v_sql;
end sp_test1;

我这样写的有问题,据说要游标还要包什么的,为什么?
谁给我写一下,最好加注释让我明白为什么这样写!

------解决方案--------------------
SQL code

--声明包头
CREATE OR REPLACE PACKAGE PACK_TEST
AS 
--这个是游标
    TYPE TESTCUR IS REF CURSOR;
--这个是过程 
    PROCEDURE sp_test1(DWMC in VARCHAR2, LX in VARCHAR2,
P_CUR OUT TESTCUR); 
END PACK_TEST; 
--声明包体
CREATE OR REPLACE PACKAGE BODY PACK_TEST
AS
PROCEDURE sp_test1(DWMC in VARCHAR2, LX in VARCHAR2,
P_CUR OUT TESTCUR) is
strsql varchar2(1000);
begin
strsql:='select * from test_table where dwmc='':dwmc'' and lx='':lx''';
open p_cur for strsql using dwdc,lx;--上一句的:及这一句为绑定变量
end sp_test1; 
end PACK_TEST;

------解决方案--------------------
探讨
出现这个错误:
Compilation errors for PACKAGE PG.PACK_TEST

Error: PLS-00103: 出现符号 "CREATE"
Line: 10
Text: CREATE OR REPLACE PACKAGE BODY PACK_TEST


------解决方案--------------------
探讨
我是楼主
我把package和package body分成2段分别执行,执行成功了。
可是我该在pl/sql中如何执行sp_test1这个存储?在procedures列表中没有找到sp_test1这个存储。
在package body中找到了PACK_TEST包体,view打开,在program window左边窗口中找到了sp_test1,我在上面右键选择了test(我想这是不是测试存储过程的,像sqlserver一样),然后弹出了test window,test window下方是2个传入变量和一个传出的游标,在Value列这…