当前位置 : 主页 > 编程语言 > c++ >

Oracle pl/sql

来源:互联网 收集:自由互联 发布时间:2021-07-03
gistfile1.txt /* Oracle PL/SQL-------------------------过程,函数,游标,触发器----------------------------存储过程 CREATE [OR REPLACE] PROCEDURE pname [ (param1 [mode1] type1, param2 [mode2] type2, …)] IS | AS BEGIN 执行代码
gistfile1.txt
/* Oracle PL/SQL
-------------------------过程,函数,游标,触发器--------------------------
--存储过程
   CREATE [OR REPLACE] PROCEDURE pname
   [ (param1  [mode1]        type1,
      param2  [mode2]        type2,
      …)]
  IS | AS
  BEGIN
    执行代码
  END [pname]
pname:过程名称
param1、param2:形参名称
mode1、mode2:参数模式,包括IN(默认)、OUT、IN OUT
type1、type2:参数数据类型
SQL窗体执行存储过程:begin 存储过程名称 end
SQL命令窗体执行存储过程:exec 存储过程名称
查询所有过程:select * from user_objects where object_type='PROCEDURE'

特点:存储过程可以直接运行,可以返回多个值

------------------------------------------------------------------------
2.函数
CREATE [OR REPLACE] FUNCTION fname
[(param1 [mode1] type1,
 param2 [mode2] type2,
)]
	return type
	IS | AS
	BEGIN
	   执行代码块
	END [fname]
注意:函数一定要有返回值
查询所有函数:select object_name from user_objects where object_type='FUNCTION';
------------------------------------------------------------------------
3.游标
------------------
SQL语句                        游标               
非查询语句                     隐式的             
结果是单行的查询语句           隐式的或显示的     
结果是多行的查询语句          显示的
------------------
隐式游标属性:
SQL%FOUND    –  语句影响了一行或多行时为 TRUE
SQL%NOTFOUND –  语句没有影响任何行时为TRUE
SQL%ROWCOUNT –  语句影响的行数
SQL%ISOPEN   - 游标是否打开,始终为FALSE
------------------
显式游标
a.定义:
        CURSOR cursor_name[(parameter[, parameter]…)] 
           [RETURN datatype]
           IS 
        select_statement;
b.打开游标
        OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)];
c.提取游标数据
        FETCH cursor_name INTO {variable_list | record_variable };
d.关闭游标
        CLOSE cursor_name;
        
        案例1:查询前10名员工的信息。
        DECLARE
           CURSOR c_cursor 
           IS SELECT first_name || last_name, Salary 
           FROM EMPLOYEES 
           WHERE rownum<11;   
           v_ename  EMPLOYEES.first_name%TYPE;
           v_sal    EMPLOYEES.Salary%TYPE;   
        BEGIN
          OPEN c_cursor;
          FETCH c_cursor INTO v_ename, v_sal;
          WHILE c_cursor%FOUND LOOP
             DBMS_OUTPUT.PUT_LINE(v_ename||'---'||to_char(v_sal) );
             FETCH c_cursor INTO v_ename, v_sal;
          END LOOP;
          CLOSE c_cursor;
        END;
-------------------------
y-----------------------------------------------
3.触发器
CREATE OR REPLACE TRIGGER trigger_name
	timing event1 ON table_name
	[FOR EACH ROW]
	DECLARE
	BEGIN
 		--触发器代码
	END;
--------------------------------------
    tname:表示触发器名字
    timing:表示触发时间 after before
    event1:表示触发事件 insert,update,delete
    table_name:表示针对的表
    for each row:(默认是语句级)行级触发器(当一条SQL语句影响多行时,多行同时出发 触发器),DML语句处理每条记录都会执行触发器;否则是一个语句级的触发器,每个DML语句触发一次
------------------
功能         说明                    举例
触发时间     触发器体执行的时机       before,after
触发事件     哪类具体的数据操纵语句   insert,update,delete
new old
查询所有触发器:select trigger_name from all_triggers where table_name='XXX';
------------------------------------------------------------------------
*/
网友评论