• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
苏沐
帮助1

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

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

oracle 12版本以上适用:

动态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;


这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgijghb
系列文章
更多 icon
同类精品
更多 icon
继续加载