参考:
create or replace procedure DynamicQuery(p_StrSQL in string)
is
v_CursorID INTEGER;
v_SelectStmt VARCHAR2(500);
v_Dummy INTEGER;
v_ReturnRow INTEGER;
v_MailID VARCHAR2(20); begin
--打开游标
v_CursorID:=DBMS_SQL.OPEN_CURSOR; --将传入的SQL文付给已经定义的变量
v_SelectStmt:=p_StrSQL; --利用DBMS_SQL包的内置函数解析SQL文
DBMS_SQL.PARSE(v_CursorID,v_SelectStmt,DBMS_SQL.V7); --定义需要输出的变量
DBMS_SQL.DEFINE_COLUMN(v_CursorID,1,v_MailID,20); --执行SQL文,如果是DML语句,则返回处理的行数
v_Dummy:=DBMS_SQL.EXECUTE(v_CursorID); loop
--将匹配查询的行提取到缓冲区,每次一行,返回取到的行数,=0表示不再取到值
v_ReturnRow:=DBMS_SQL.FETCH_ROWS(v_CursorID);
if v_ReturnRow=0 then
exit;
end if; --将缓冲区中的数据提取到PL/SQL变量中
DBMS_SQL.COLUMN_VALUE(v_CursorID,1,v_MailID);
end loop; --关闭游标
DBMS_SQL.CLOSE_CURSOR(v_CursorID); EXCEPTION
when others then
DBMS_SQL.CLOSE_CURSOR(v_CursorID);
raise; end DynamicQuery;
create or replace procedure DynamicQuery(p_StrSQL in string)
is
v_CursorID INTEGER;
v_SelectStmt VARCHAR2(500);
v_Dummy INTEGER;
v_ReturnRow INTEGER;
v_MailID VARCHAR2(20); begin
--打开游标
v_CursorID:=DBMS_SQL.OPEN_CURSOR; --将传入的SQL文付给已经定义的变量
v_SelectStmt:=p_StrSQL; --利用DBMS_SQL包的内置函数解析SQL文
DBMS_SQL.PARSE(v_CursorID,v_SelectStmt,DBMS_SQL.V7); --定义需要输出的变量
DBMS_SQL.DEFINE_COLUMN(v_CursorID,1,v_MailID,20); --执行SQL文,如果是DML语句,则返回处理的行数
v_Dummy:=DBMS_SQL.EXECUTE(v_CursorID); loop
--将匹配查询的行提取到缓冲区,每次一行,返回取到的行数,=0表示不再取到值
v_ReturnRow:=DBMS_SQL.FETCH_ROWS(v_CursorID);
if v_ReturnRow=0 then
exit;
end if; --将缓冲区中的数据提取到PL/SQL变量中
DBMS_SQL.COLUMN_VALUE(v_CursorID,1,v_MailID);
end loop; --关闭游标
DBMS_SQL.CLOSE_CURSOR(v_CursorID); EXCEPTION
when others then
DBMS_SQL.CLOSE_CURSOR(v_CursorID);
raise; end DynamicQuery;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货