基本知识。
有的时候,希望在select语句中使用自己定义的函数,并且这个函数除了返回特定的值之外,还执行update,insert,delete等操作。
对数据库有写操作(update,insert,delete,crate,alert,commit)的函数是无法简单的用SQL来调用的。
如何实现?关键是pragma autonomous_transaction
如下例子:
SQL> Create or replace function func_getid return int is
2 pragma autonomous_transaction;
3 vid int;
4 begin
5 select max(id) into vid from test_id;
6 update test_id set id=id+1;
7 commit;
8 return vid;
9 end;
10 /
Function created
SQL> select func_getid from dual;
FUNC_GETID
----------
1
SQL> select func_getid from dual;
FUNC_GETID
----------
2
分享到:
相关推荐
Oracle自治事务的介绍(Autonomous_Transactions)PRAGMA_AUTONOMOUS_TRANSACTION
在触发器中使用自制事务及调用存储过程 Declare Pragma Autonomous_Transaction; ...
要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。
利用pragma data_seg实现程序只能单个实例运行测试工程。已在VC 6.0环境下成功运行
PRAGMA table_info('keys');--获取表的列信息 PRAGMA database_list; 对每个打开的数据库,使用该数据库的信息调用一次回叫函数。使用包括附加的数据库名和索引名在内的参数。第一行用于主数据库,第二行用于存放...
快速学习函数创建和练习。 创建函数、存储过程、创建过程、调用存储过程、AUTHID、PRAGMA AUTONOMOUS_TRANSACTION、开发存储过程步骤、删除过程和函数、过程与函数的比较
#pragma CODE SEG NEAR SEG NON BANKED前一段时间写函数中断时 经常要加上#pragma语句 否则 编译就会出错 有飞思卡尔的16位单片机写过中断函数的人 就会知道在中断函数前必须加上代码 #pragma CODE SEG NEAR SEG NON...
代码如下:create or replace Function GetInvitationNO...– 需要使用“Current_User”的权限防止无法运行“Execute Immediate”命令 & “PRAGMA AUTONOMOUS_TRANSACTION”自制事务防止DML无法DDL的问题 Totalprev V
#pragma_命令集合 介绍pragma_命令的用法,使你不再迷茫
pragma_comment用法,jian dan de jie shao.pragma_comment用法
#pragma_命令集合.pdf 不错的东西 很重要
IAR软件的操作使用说明,非常详细,哈哈哈哈哈
#pragma使用详解 .pdf #pragma使用详解 .pdf #pragma使用详解 .pdf
很详细的讲解 #Pragma_Pack的用法,作用,及效果,一目了然。
1 #pragma CODE_SECTION(InitFlash, "ramfuncs")? 众所周知,微处理器从内存RAM中取指令的速度要比从flash中取指令要快好多倍,但是RAM的缺陷限制了其不能存储用户程序代码,因为RAM掉电会丢失数据,但是其速度要快...
只不过对于加密数据库,需要在对数据库进行任何操作前,先执行“PRAGMA key=xxx;”。通过这种方式输入数据库密码。检验之前的密码是否正确可以在命令行中键入“.databases”,如果没有错误提示,那就是解密成功了;...
create or replace procedure delBigTab(p_TableName in varchar2,p_Condition in varchar2,p_Count in varchar2) as pragma autonomous_transaction; n_delete number:=0; begin while 1=1 loop ...
PRAGMA pragma_name; 要为 PRAGMA 设置一个新的值,语法如下: PRAGMA pragma_name = value; 设置模式,可以是名称或等值的整数,但返回的值将始终是一个整数。 auto_vacuum Pragma auto_vacuum Pragma 获取或...
#pragma data_seg("MySec") HWND g_hWnd=NULL; #pragma data_seg() #pragma comment(linker,"/section:MySec,RWS") /* SEGMENTS MySec READ WRITE SHARE */ #define WM_MSG WM_USER + 500 LRESULT CALLBACK ...
在所有的预处理指令中,#Pragma...#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。