皇牌天下投注网存储过程

来源:http://www.prospettivedarte.com 作者:计算机教程 人气:131 发布时间:2020-04-30
摘要:以上所述是小编给大家介绍的oracle中print_table存储过程介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支

以上所述是小编给大家介绍的oracle中print_table存储过程介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

删除存储过程

1.基本语法:

drop procedure sp_name

2.注意事项

(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

如下测试所示:

功能

编辑

这类语言主要提供以下功能,让用户可以设计出符合应用需求的程序:

1)、变量说明

2)、ANSI(美国国家标准化组织)兼容的SQL命令(如Select,Update….)

3)、一般流程控制命令(if…else…、while….)

4)、内部函数

一直以来,觉得MySQL中使用G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_table实现了类似这样的功能。只是我们这些凡夫俗子不知道而已,特意整理在此,方便自己或有需要的人以后查看。

中文名
存储过程

总结

概念及作用

触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

(1) 强化约束(Enforce restriction)

触发器能够实现比CHECK 语句更为复杂的约束。

(2) 跟踪变化Auditing changes

触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

(3) 级联运行(Cascaded operation)。

触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

(4) 存储过程的调用(Stored procedure invocation)。

为了响应数据库更新,皇牌天下投注网,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。

由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(Insert、 Update、 Delete)的多个触发器能够对同一种数据操作采取多种不同的处理。

总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。

CREATE OR REPLACE PROCEDURE print_table(p_query IN VARCHAR2) AUTHID CURRENT_USER IS l_thecursor INTEGER DEFAULT dbms_sql.open_cursor; l_columnvalue VARCHAR2(4000); l_status INTEGER; l_desctbl dbms_sql.desc_tab; l_colcnt NUMBER; BEGIN EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' '; dbms_sql.parse(l_thecursor, p_query, dbms_sql.native); dbms_sql.describe_columns (l_thecursor, l_colcnt, l_desctbl); FOR i IN 1 .. l_colcnt LOOP dbms_sql.define_column (l_thecursor, i, l_columnvalue, 4000); END LOOP; l_status := dbms_sql.EXECUTE(l_thecursor); WHILE ( dbms_sql.Fetch_rows(l_thecursor)  0 ) LOOP FOR i IN 1 .. l_colcnt LOOP dbms_sql.column_value (l_thecursor, i, l_columnvalue); dbms_output.Put_line (RPAD(L_desctbl(i).col_name, 30) || ': ' || l_columnvalue); END LOOP; dbms_output.put_line('-----------------'); END LOOP; EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-MON-rr'' '; EXCEPTION WHEN OTHERS THEN EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-MON-rr'' '; RAISE; END; /

触发器种类

SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。其中AFTER触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(Insert Update Delete) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。

INSTEAD OF触发器表示并不执行其所定义的操作(Insert、 Update、 Delete),而仅是执行触发器本身。既可在表上定义INSTEAD OF触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。

所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

调用存储过程

1.基本语法:exec sp_name [参数名]

SQL set serveroutput on size 99999;SQL execute print_table('select * from v$session where sid=997');SADDR : 000000085FA35CA0SID : 997SERIAL# : 1AUDSID : 0PADDR : 000000085F6B7E70USER# : 0USERNAME :COMMAND : 0OWNERID : 2147483644TADDR :LOCKWAIT :STATUS : ACTIVESERVER : DEDICATEDSCHEMA# : 0SCHEMANAME : SYSOSUSER : oraclePROCESS : 5036MACHINE : xxxxPORT : 0TERMINAL : UNKNOWNPROGRAM : oracle@xxxxx (DBW0)TYPE : BACKGROUNDSQL_ADDRESS : 00SQL_HASH_VALUE : 0SQL_ID :SQL_CHILD_NUMBER : 0PREV_SQL_ADDR : 00PREV_HASH_VALUE : 0PREV_SQL_ID :PREV_CHILD_NUMBER : 0PLSQL_ENTRY_OBJECT_ID :PLSQL_ENTRY_SUBPROGRAM_ID :PLSQL_OBJECT_ID :PLSQL_SUBPROGRAM_ID :MODULE :MODULE_HASH : 0ACTION :ACTION_HASH : 0CLIENT_INFO :FIXED_TABLE_SEQUENCE : 0ROW_WAIT_OBJ# : -1ROW_WAIT_FILE# : 0ROW_WAIT_BLOCK# : 0ROW_WAIT_ROW# : 0LOGON_TIME : 04-jul-2018 21:15:52LAST_CALL_ET : 5272838PDML_ENABLED : NOFAILOVER_TYPE : NONEFAILOVER_METHOD : NONEFAILED_OVER : NORESOURCE_CONSUMER_GROUP :PDML_STATUS : DISABLEDPDDL_STATUS : DISABLEDPQ_STATUS : DISABLEDCURRENT_QUEUE_DURATION : 0CLIENT_IDENTIFIER :BLOCKING_SESSION_STATUS : NO HOLDERBLOCKING_INSTANCE :BLOCKING_SESSION :SEQ# : 34697EVENT# : 3EVENT : rdbms ipc messageP1TEXT : timeoutP1 : 300P1RAW : 000000000000012CP2TEXT :P2 : 0P2RAW : 00P3TEXT :P3 : 0P3RAW : 00WAIT_CLASS_ID : 2723168908WAIT_CLASS# : 6WAIT_CLASS : IdleWAIT_TIME : 0SECONDS_IN_WAIT : 107STATE : WAITINGSERVICE_NAME : SYS$BACKGROUNDSQL_TRACE : DISABLEDSQL_TRACE_WAITS : FALSESQL_TRACE_BINDS : FALSEECID :-----------------PL/SQL procedure successfully completed.SQL

种类

编辑

1系统存储过程

以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。

2本地存储过程

用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。

3临时存储过程

分为两种存储过程:

一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;

二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

4远程存储过程

在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

5扩展存储过程

扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。

参考资料:

触发器

编辑

_QUESTION_ID:1035431863958,{print_table}

外文名
Stored Procedure

定义

其他常用命令

1.show procedure status

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

2.show create procedure sp_name

显示某一个mysql存储过程的详细信息

3、exec sp_helptext sp_name

显示你这个sp_name这个对象创建文本

缺点

1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

4: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

本文由皇牌天下投注网发布于计算机教程,转载请注明出处:皇牌天下投注网存储过程

关键词:

最火资讯