plsql开发中动态sql的使用教程(不使用dbms_sql包)

一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是对于新建存储过程,其中涉及传参要被应用为列名时,不能在PL/SQL中直接使用,一会儿下面举例介绍,那么要想实现设计的功能,可以通过使用动态SQL来实现。

首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。

Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。本篇文章我们只介绍本地动态执行sql:

oracle 12版本以上适用:

动态sql

sql 复制代码
drop package su1;

create or replace package su as

​	function get_id() return varchar2;

end su;

/

create or replace package body su1 as

​	function get_id() return varchar2

​	as

​	str_sql varchar2(200);

​	b varchar2(200);

​	begin

​		str_sql := 'select * from b1';

​		execute immediate str_sql into b;

​		return b;

​	end;

end su1;

/

select su1.get_id() from dual;

create or replace package su as

​	function get_id(tabname in varchar2) return varchar2;

end su;

/

create or replace package body su1 as

​	function get_id(tabname in varchar2) return varchar2

​	as

​	str_sql varchar2(200);

​	b varchar2(200);

​	begin

​		str_sql := 'select * from '||tabname||'';

​		execute immediate str_sql into b;  --注意这里仅有一行数据返回

​		return b;

​	end;

end su1;

/

select su1.get_id('b1') from dual;
相关推荐
Eugene Jou3 小时前
Dinky+Flink SQL达梦数据库实时同步到Doris简单实现
数据库·sql·flink
玄同7653 小时前
SQLAlchemy 会话管理终极指南:close、commit、refresh、rollback 的正确打开方式
数据库·人工智能·python·sql·postgresql·自然语言处理·知识图谱
【赫兹威客】浩哥3 小时前
【赫兹威客】完全分布式HBase测试教程
数据库·分布式·hbase
一晌小贪欢3 小时前
Python ORM 深度解析:告别繁琐 SQL,让数据操作如丝般顺滑
开发语言·数据库·python·sql·python基础·python小白
九号铅笔芯3 小时前
社区评论系统设计
java·数据库·sql
码农多耕地呗3 小时前
mysql之深入理解b+树原理
数据库·b树·mysql
踢足球09293 小时前
寒假打卡:2026-01-26
数据库
漂洋过海的鱼儿3 小时前
Qt--元对象系统
开发语言·数据库·qt
沧澜sincerely3 小时前
分组数据【GROUP BY 与 HAVING的使用】
数据库·sql·group by·having
知识分享小能手3 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle数据库控制 —— 事务与并发控制详解(14)
数据库·学习·oracle