PL/SQL:程序語言:SQL、程序語言的三大結構:循環、判斷、順序
語言塊:Block
存儲過程:Procedure
函數:Function
執行任務:Jobs
觸發器:Trigger
塊:
DECLARE --定義變量 v_a VARCHAR2(10) := 'AAA'; BEGIN NULL; DBMS_OUTPUT.PUT_LINE(v_a); END;
存儲過程:
CREATE OR REPLACE PROCEDURE t1(v_i VARCHAR2) IS --DECLARE --定義變量 --v_a VARCHAR2(10) := 'AAA'; BEGIN NULL; DBMS_OUTPUT.PUT_LINE(v_i); END t1; --帶游標的存儲過程 CREATE OR REPLACE PROCEDURE p_t2 IS CURSOR c_cur IS( SELECT * FROM TEST_TEM_COURSE_DIS t --GROUP BY t.inpatient_no ); BEGIN FOR v_content IN c_cur LOOP DBMS_OUTPUT.put_line(v_content.patient_id); END LOOP; END p_t2;
存儲過程應用實例:
--單行多病程 轉 多行單病程 create or replace procedure p_course_dis is v_col_record_time varchar2(4000) := '';--列名 v_col_record_content varchar2(4000) := ''; v_col_record_doctor varchar2(4000) := ''; v_record_time varchar2(4000) := '';--列值 v_record_content varchar2(4000) := ''; v_reccord_doctor varchar2(4000) := ''; cursor v_rows is select reference_id from MULTICOL_COURSE_DIS;--主鍵游標 v_sql VARCHAR2(4000) := '';--sql語句 begin for v_row in v_rows loop--遍歷表 for v_i in 1 .. 3 loop--循環列 v_col_record_time := 'record_time' || v_i;--列名賦值 v_col_record_content := 'record_content' || v_i; v_col_record_doctor := 'record_doctor' || v_i; v_sql := 'select ' || v_col_record_time || ',' || v_col_record_content || ',' || v_col_record_doctor || ' from MULTICOL_COURSE_DIS where reference_id = ''' || v_row.reference_id || ''''; EXECUTE IMMEDIATE v_sql into v_record_time, v_record_content, v_reccord_doctor;--執行sql DBMS_OUTPUT.put_line(v_record_time || ' ' || v_record_content || ' ' || v_reccord_doctor);--輸出樣例 end loop; end loop; end p_course_dis;
浙公網安備 33010602011771號