oracle存储过程报错> ORA-24344: success with compilation error的原因,execute immediate 执行动态SQL

Oracle存储过程如下,测试:

create or replace procedure pro_demo
is
begin
   select * from k_cicpa;
end

错误信息:

> ORA-24344: success with compilation error

而在SQL中直接像下面这样可以正常工作,exec 这个存储过程可以正常显示查询结果。

--drop PROCEDURE pro_demo
create  procedure pro_demo
as
begin
   select * from k_cicpa;
end

 exec pro_demo;

oracle存储过程报错> ORA-24344: success with compilation error的原因,execute immediate 执行动态SQL_第1张图片

本人第一次接触Oracle的存储过程

错误原因:

Oracle存储过程中不能用这样的写法,比如不能写简单的select ... from ... ,这点不同于sql server

--要么写成
select 字段 into 变量 from student;
--要么写成
execute immediate 'select * from student;'
--要么用游标存储

过程中都是selet col into v_col from tb 的形式
 
--改成这样下面这样就行了,

 create or replace procedure p1
 as
  v_sql varchar2(4000);
 begin
   v_sql:='select * from xs';
   execute immediate v_sql;
 end;



execute immediate:用于在存储过程里面. 动态的执行 SQL语句,比如使用本地动态SQL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。

create or replace procedure proc_test  
(  
table_name in varchar2, --表名  
field1 in varchar2, --字段名  
datatype1 in varchar2, --字段类型  
field2 in varchar2, --字段名  
datatype2 in varchar2 --字段类型  
) as  
str_sql varchar2(500);  
begin  
str_sql:='create table '||table_name||'('||field1||' '||datatype1||','||field2||' '||datatype2||')';  
execute immediate str_sql; --动态执行DDL语句  
exception  
when others then  
null;  
end ;

 

你可能感兴趣的:(数据库技术)