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;
相关推荐
weixin_568996062 分钟前
Python开发Flask项目如何部署到云服务器_使用Fabric自动化发布脚本
jvm·数据库·python
m0_596406373 分钟前
Python中正确声明、重新赋值并安全使用None变量的完整指南
jvm·数据库·python
卡西里弗斯奥4 分钟前
【海量数据库】替换授权文件
数据库·授权·海量·替换授权文件
m0_716430076 分钟前
实现 Flex 容器内子元素自适应高度并启用自动滚动
jvm·数据库·python
weixin_381288186 分钟前
c++怎么在写入文本文件时自动将所有的制表符统一转换为四格空格【实战】
jvm·数据库·python
老毛肚7 分钟前
Redis分布式篇
数据库·redis·分布式
m0_743623928 分钟前
MySQL导入大SQL文件报错怎么办_拆分文件与优化系统参数
jvm·数据库·python
weixin_424999369 分钟前
组件懒加载如何处理 JS 报错后的重试加载?保障应用高可用性实战
jvm·数据库·python
baidu_3409988210 分钟前
SQL中如何通过视图实现行级加密_CASE WHEN语句的妙用
jvm·数据库·python
qq_3721542310 分钟前
mysql如何限制单用户最大连接数_修改max_user_connections
jvm·数据库·python