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的存储过程

错误原因:

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 ;

 

posted @   IT情深  阅读(795)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示