Oracle执行超长SQL的存储过程问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle执行超长SQL的存储过程问题相关的知识,希望对你有一定的参考价值。
drop procedure p_record
TYPE t_cursor is ref cursor;
procedure p_record(re_cursor out t_cursor) is v_sql_cursor varchar2(8000);
begin
v_sql_cursor:= '超长select语句 ';
execute immediate v_sql_cursor;
open re_cursor for v_sql_cursor;
end p_record;
这个代码有什么问题 我执行报错了
varchar2 最大长度为4000, 写8000肯定不行。
你可以写两个varchar2,一个 4000,然后连接起来执行,可以的
......
v_sql_cursor varchar1(4000);
v_sql_cursor varchar2(4000);
begin
execute immediate v_sql_cursor1 || v_sql_cursor2;
这样连接,就成了8000了 参考技术A v_sql_cursor 的范围是8000
你的超长语句的长度超过这个范围没有
最后贴出报错信息 这样更好查错 参考技术B 错误的地方在于变量v_sql_cursor ,最大支持2000字节 ,所以v_sql_cursor:= '超长select语句 ' 会报错 ;
你应该修改为open re_cursor for 超长select语句 参考技术C F8一下 然后
PL_sql如何执行oracle存储过程
create or replace procedure area
begin
select * from ods_area;
end
execute area;--执行
1.select * from ods_area; 不能直接在pl/sql 中作为语句执行。
应该用 select 字段 into plsql变量 from 表名;
的形式来获取表中的数据,保存到plsql变量中。
2. 存储过程的语法格式为:
create or replace procedure area
is
--变量声明;
begin
--过程主体;
end area;
3. 如果存储过程代码无误,可以通过 "/" 来执行代码,编译存储过程。
4.通过exec 或 execute 来调用编译后的存储过程。
例如:
-- 创建procedure:
create or replace procedure area
is
num number ;
v_areaRecord dual%ROWTYPE;
begin
--例子1
select * into v_areaRecord from dual;
--例子2
select 12345 into num from dual;
end area;
/
-- 通过 / 执行;
--调用
exec area;本回答被提问者和网友采纳 参考技术B PLSQL Developer里面直接就有撒,用法如下:
declare
-- Non-scalar parameters require additional processing
env sys.odcienv;
begin
-- Call the procedure
sys.odcienvdump(env => env);
end; 参考技术C 在sqlplus中执行方法如下
1.(重要)在sqlplus中执行如下命令(只有这样才可以看到输出结果):
set serverout on;
2.创建
3.执行(1,2顺序可以调换)
在plsql developer中就简单了,可以在左侧列表中找到procedure,找到相应存储过程,右键,。。。等等方法
以上是关于Oracle执行超长SQL的存储过程问题的主要内容,如果未能解决你的问题,请参考以下文章