zno2

存储过程及函数初探

pl/sql   procedures 

new  新建

F8 

Ctrl + s  保存

refresh  刷新

test 测试

dbms_output.put_line('Test script | DBMS Output | ...');

IF SQL%ROWCOUNT = 1 THEN

XXX

ELSE

XXX

END IF;

以上片段 管中窥豹可见一斑

命名规范

CREATE OR REPLACE PROCEDURE P_XX_TT(PARM1 IN VARCHAR2, RESULT OUT INTEGER) IS
  V_XX_NAME VARCHAR2(10) DEFAULT '1234567890';
BEGIN
  INSERT INTO ZXG
    (A, B)
    SELECT C.* FROM ZXG C;
  RESULT := SQL%ROWCOUNT;
  IF RESULT = 1 THEN
    DBMS_OUTPUT.PUT_LINE(RESULT);
    DBMS_OUTPUT.PUT_LINE('插日志 成功');
    COMMIT;
    --插日志 成功
  ELSE
    DBMS_OUTPUT.PUT_LINE(RESULT);
    DBMS_OUTPUT.PUT_LINE('插日志 失败| sdf | ..');
    ROLLBACK;
    RESULT := 0;
    --插日志 失败
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    --插入数据时产生异常
    DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM);
    ROLLBACK;
    RESULT := 0;
END P_XX_TT;

 

-- 更新
DECLARE
  A ZXG.A%TYPE;
  B VARCHAR2(10);
  CURSOR C IS
    SELECT DISTINCT A, B FROM ZXG WHERE A IS NOT NULL;

BEGIN
  OPEN C;
  FETCH C
    INTO A, B;
  WHILE C%FOUND LOOP
    UPDATE ZXG T SET T.A = B WHERE T.B = B;
    FETCH C
      INTO A, B;
  END LOOP;
  CLOSE C;
END;
-- 查看用sql 
-- SELECT  * FROM zxg for update

 

函数

CREATE OR REPLACE

FUNCTION mylog(v_type IN VARCHAR2, v_content IN VARCHAR2)

 RETURN NUMBER

 AS

BEGIN

  insert into lxzb_log
  values
    (seq_log.nextval, v_type, v_content, sysdate);

  RETURN SQL%ROWCOUNT;

END;

注意:

1.函数名不要使用关键字,比如 log ,会有莫名其妙的错误

2. 如果函数中不包含 insert 等,可以通过 select 你的函数 from dual; 测试。否则通过 pl/sql test 测试

3. 在存储过程中调用时 需要 v_var := yourfunction(param1,..) ,孤零零写一个 yourfunction(param1,...) 不好用

 

posted on 2016-08-05 18:02  zno2  阅读(94)  评论(0编辑  收藏  举报

导航