# Function ###### tags: `Oracle` `SQL` CREATE [OR REPLACE] FUNCTION function_name [ (parameter [,parameter]) ] RETURN return_datatype IS | AS [declaration_section] BEGIN executable_section [EXCEPTION exception_section] END [function_name]; 當回傳值為單值時調用方法為 SELECT FUNCTION() FORM DUAL OR?; 為物件時 SELECT * FROM TABLE(FUNCTION()); --------IN 參數 該參數可以在function 或procedure參考使用. 但function 或procedure不能修改該參數值 --------OUT 參數 該參數無法在function 或procedure參考使用. function 或procedure可以設定該參數值 在調用時要綁定變數 CREATE OR REPLACE PROCEDURE TESTT(RET OUT VARCHAR2) AS BEGIN SELECT '1' INTO RET FROM DUAL; END; 調用 VAR RET NUMBER; EXEC TESTT(:RET); PRINT RET; 調用2 DECLARE RET VARCHAR(30); BEGIN TESTT(RET); dbms_output.put_line(RET); END; CREATE OR REPLACE PROCEDURE TESTT(VV IN VARCHAR2) IS TT VARCHAR2(10); //定義參數 BEGIN SELECT '11231' INTO TT FROM DUAL; DBMS_OUTPUT.put_line (TT); DBMS_OUTPUT.put_line ('ADADASD'); DBMS_OUTPUT.put_line (VV); END TESTT; set serveroutput on;--> 再調用SP時若要顯示DBMS_OUTPUT.put_line 則要先設為ON EXEC TESTT('123123'); --------IN OUT參數 該參數可以function 或procedure參考使用, 也可以設定該參數值 --------流程控制 1.IF IF <EXPRESSION> THEN .... ELSIF <EXPRESSION> THEN .... ELSE <EXPRESSION> END IF ; 2.CASE WHEN TYPE1: CASE SOMETHING_COL WHEN VALUE1 THEN .... WHEN VALUE2 THEN .... WHEN VALUE3 THEN .... [ELSE ....] END; TYPE2: CASE WHEN <EXPRESSION> THEN .... WHEN <EXPRESSION> THEN .... WHEN <EXPRESSION> THEN .... [ELSE ....] END; 3.循環 1.Loop LOOP .... EXIT WHEN <EXPRESSION> END LOOP; 2.WHILE WHILE <EXPRESSION> LOOP ... END LOOP; 3.數字循環 FOR 變數 IN [ REVERSE 上限>下限] 下限 .. 上限 LOOP ... END LOOP [循環標籤]; 4.GOTO <<LABEL>> 規則 跳轉到非執行句前 跳轉進子塊 跳轉到循環語句內 跳轉到條件語句內 異常處理跳回執行 條件語句的一部分跳到另外一部份 範例在5.NULL 5.NULL 在PL/SQL 中NULL是一個可以執行的語句,可以用NULL語句來說明"表示不做任何事" DECLARE ... BEGIN ... IF v_num IS NULL THEN GOTO labelPrint; END IF; … <<labelPrint>> NULL; --不處理任何事情 END;