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 ;
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751904.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?