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 REPLACEFUNCTION mylog(v_type IN VARCHAR2, v_content IN VARCHAR2) RETURN NUMBER ASBEGIN 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,...) 不好用