Oracle 函数中动态执行语句

函数: 1 create or replace function fn_test(tablename in varchar2) return number is
 2   sqls varchar2(100);
 3   rtn number(10):=0;
 4 begin
 5   --获取学生表的记录条数
 6  --select count(*) into rtn from student;
 7
 8   sqls:=‘select count(*) from ‘ || tablename;
 9   execute immediate sqls into rtn;
10   dbms_output.put_line(‘记录条数 rtn=‘|| rtn);
11   return(rtn);
12 end fn_test;

SQL:

1 select fn_test(‘student‘) from dual;

注意项:在拼接SQL语句的时候,查询语句 from 关键字与要拼接的表名之间必须要记得加空格。

时间: 2024-10-01 07:31:22

Oracle 函数中动态执行语句的相关文章

动态执行语句

一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:DDL语句与DML语句及DCL和TCL. 二.动态执行语句怎么用? 动态执行语句代替了Oracle 8i中的DBMS_SQL Package包. 1)在PL/SQL中运行SQL语句,例如: 示例一: BEGIN               EXECUTE IMMEDIATE 'select count(u

MyBatis中动态SQL语句完成多条件查询

http://blog.csdn.net/yanggaosheng/article/details/46685565 MyBatis中动态SQL语句完成多条件查询 <select id="queryEmp"  resultType="cn.test.entity.Emp"> select * from emp where 1=1 <if test="deptNo!=null"> and deptno=#{deptNO} &

PL/SQL(五)PL/SQL中动态执行SQL语句

在PL/SQL程序开发中,可以使用DML语句和事务控制语句,但是还有很多语句(比如DDL语句)不能直接在PL/SQL中执行.这些语句可以使用动态SQL来实现. PL/SQL块先编译然后再执行,动态SQL语句在编译时不能确定,只有在程序执行时把SQL语句作为字符串的形式由动态SQL命令来执行.在编译阶段SQL语句作为字符串存在,程序不会对字符串中的内容进行编译,在运行阶段再对字符串中的SQL语句进行编译和执行,动态SQL的语法是: 语法格式:动态SQL EXECUTE IMMEDIATE 动态语句

oracle 关于动态执行语句 execute immediate 的用法

当在开发的应用场景中 数据库处理复杂业务逻辑里用到 SQL 语句拼接    可以用  execute immediate   来执行语 举个例子 insert into tb_temp_public(v1, v2, V3, V4, V5,V6,V7,V8,v9)  select '','','','','','','','','' from dual : tb_temp_public  里面的字段是动态生成的  后面对应的值也是动态生成的时候  这个时候执行语句  可以用: vsql   var

Oracle错误:动态执行表不可访问,本会话自动统计被禁止,关闭自动统计之后的问题

使用PL/SQL时, 每次第一次打开表的时候会提示"动态执行表不可访问,本会话的自动统计被禁止"的错误,一消息如下: V$SESSION,V$SESSTAT,V$STATNAME没有被授权,没有权限访问这几张表,所以没有本法进行统计. 当然要给授权了.授权SQL如下: sqlplus /nolog 进入登录页面,然后执行conn /as sysdba   登录到sys用户 用SYS登录,授权给相应的用户,用下面的语句 grant select on v_$statname to sco

存储过程中动态执行SQL并获取返回结果

很久没有写存储过程了,因为存储过程违背OOP精神,话说带了参数的存储过程,如果业务需求改变,改存储过程还真的挺麻烦的.所以现在比较倾向于负责的业务逻辑在业务层去处理,业务层专门做业务层的事情. 通过一层巧妙地包装,动态执行SQL语句就解决了 ALTER procedure [dbo].[PROC_NextSteps] ( @Count int, @IDS NVARCHAR(500), @Rules NVARCHAR(MAX), @IDSOut NVARCHAR(500) OUT ) as BEG

如何在Oracle触发器中使用查询语句

通常情况下,Oracle数据库禁止在行级触发器或行级触发器所调用的子程序中使用查询语句.但是,面对复杂的业务逻辑,不可避免的要使用查询语句. 当在行级触发器中使用查询语句时,Oracle数据库会抛出ORA-04091异常. Oracle官方文档中对ORA-04091异常的说明如下: ORA-04091: table string.string is mutating, trigger/function may not see it Cause: A trigger (or a user defi

在VB中动态执行VBS代码,可操控窗体控件

通过执行一段VBS代码来操控窗体内的控件 也可以使用AddObject方法添加自己的类,那么在动态VBS代码中也一样可以使用 在增加程序扩展性或是有脚本化需求的时候,这个方法还是不错的. Option Explicit Dim vbs As Object Private Sub Command1_Click() vbs.ExecuteStatement "showtime" End Sub Private Sub Form_Load() Set vbs = CreateObject(&

FORM中执行动态sql语句

今天在 FORM BUILDER中用 execute immediate 'sql staments'执行动态sql时报错. 后查发现form中用forms_ddl函数执行动态sql,并且此函数暗含了commit: 详细介绍如下: 一.FORMS_DDL函数 FUNCTION FORMS_DDL(statement  VARCHAR2); 用于动态执行SQL语句与PL/SQL语句 注意事项: 1.参数statement的最大容量不能超过32K. 2.DDL类型的SQL语句,暗含一个commit命