Presentation is loading. Please wait.

Presentation is loading. Please wait.

PL/SQL. Процедуры CREATE [OR REPLACE] PROCEDURE имя_процедуры (имя_аргумента1 [режим1][NOCOPY] тип данных1[DEFAULT значение1],.., имя_аргументаN [режимN]

Similar presentations


Presentation on theme: "PL/SQL. Процедуры CREATE [OR REPLACE] PROCEDURE имя_процедуры (имя_аргумента1 [режим1][NOCOPY] тип данных1[DEFAULT значение1],.., имя_аргументаN [режимN]"— Presentation transcript:

1 PL/SQL

2 Процедуры CREATE [OR REPLACE] PROCEDURE имя_процедуры (имя_аргумента1 [режим1][NOCOPY] тип данных1[DEFAULT значение1],.., имя_аргументаN [режимN] [NOCOPY] тип данныхN [DEFAULT значениеN]) IS блок PL/SQL; Режимы: IN, OUT, IN OUT.

3 CREATE OR REPLACE PROCEDURE ОБНОВИТЬ_РЕЗУЛЬТАТ(П_ПРОД_ИД IN NUMBER) IS /* обновление результата продаж для продавца в соответствии с оформленными им заказами */ В_СУММА NUMBER; BEGIN /* считаем реальную сумму продаж */ SELECT SUM(СУММА) INTO В_СУММА FROM ЗАКАЗЫ WHERE ПРОД_ИД=П_ПРОД_ИД; /* обновим результат в таблице ПРОДАВЦЫ */ UPDATE ПРОДАВЦЫ SET РЕЗУЛЬТАТ=В_СУММА WHERE ИД=П_ПРОД_ИД; /* выведем сообщение о результатах */ IF В_СУММА IS NULL THEN dbms_output.put_line('Объем продаж продавца изменен на NULL'); IF В_СУММА IS NULL THEN dbms_output.put_line('Объем продаж продавца изменен на '||В_СУММА); END;

4 Функции CREATE [OR REPLACE] FUNCTION имя_Функции (имя_аргумента1 [режим1] [NOCOPY] тип данных1 [DEFAULT значение1],.., имя_аргументаN [режимN] [NOCOPY] тип данныхN [DEFAULT значениеN]) RETURN тип данных IS блок PL/SQL; режим может принимать только одно значение IN.

5 Вызов процедур CallProc(var1,var2,var3); CallProc(par1=>var1,par3=>var3,par2=>var2) CALL CallProc(var1,var2,var3)into var3

6 CREATE OR REPLACE FUNCTION ОБЪЕМ_ПРОДАЖ(П_ПРОД_ИД IN NUMBER, П_ДАТА1 IN DATE, П_ДАТА2 IN DATE) IS /* объем продаж продавца за период */ В_РЕЗУЛЬТАТ NUMBER; BEGIN /* считаем сумму продаж */ SELECT NVL(SUM(СУММА),0) INTO В_РЕЗУЛЬТАТ FROM ЗАКАЗЫ WHERE ПРОД_ИД=П_ПРОД_ИД ДАТА BETWEEN П_ДАТА1 AND П_ДАТА2; RETURN В_РЕЗУЛЬАТ; END;

7 Execute immediate Declare V_SQLString varchar2(200); V_PLSQLBlock varchar2(200); Begin EXECUTE IMMEDIATE ‘Create table execute_table(call varchar2(10))’; FOR v_Counter in 1..10 LOOP V_SQLString:=‘insert into execute_table values ( :n)’; Execute immediate v_SQLString using ‘row’||v_Counter; End LOOP; V_plsqlblock:=‘begin for v_rec in (select * from execute_table) LOOP DBMS_OUTPUT.PUT_LINE(v_Rec.call); end LOOP; end’; Execute immediate v_plsqlblock; Execute immediate ‘drop table execute_table’; End;

8 DBMS_SQL CREATE OR REPLACE PROCEDURE UpdateClasses( P_Department IN classes.department%TYPE, P_NewCredits IN classes.num_credits%TYPE, P_RowsUpdated OUT INTEGER) AS V_CursorID INTEGER; V_UpdateStmt VARCHAR2(100) BEGIN V_CursorID := DBMS_SQL.OPEN_CURSOR; V_UpdateStmt:=‘Update classes set num_credits = :nc Where department= :dept’; DBMS_SQL.PARSE(v_CursorID,v_UpdateStmt, DBMS_SQL.NATIVE); DBMS_SQL.BIND_VARIABLE(v_CursorID, ‘:nc’, p_NewCredits); DBMS_SQL.BIND_VARIABLE(v_CursorID, ‘:dept’, p_Department); P_RowsUpdated:=DBMS_SQL.EXECUTE(v_CursorID); DBMS_SQL.CLOSE_CURSOR(v_CursorID); EXCEPTION When others then DBMS_SQL.CLOSE_CURSOR(v_CursorID); RAISE; End UpdateClasses;

9 DBMS_PIPE Declare V_PipeName varchar2(30) :=‘myPipe’; V_status INTEGER; Begin DBMS_PIPE.PACK_MESSAGE(SYSDATE); DBMS_PIPE.PACK_MESSAGE(123456); DBMS_PIPE.PACK_MESSAGE(‘This is a message’); V_Status := DBMS_PIPE.SEND_MESSAGE(v_PipeName); IF V_Status != 0 THEN DBMS_OUTPUT.PUT_LINE(‘Error ’||v_Status); End IF; End;

10 DBMS_PIPE Declare V_PipeName VARCHAR2(30) := ‘MyPipe’; V_Status INTEGER; V_DateVal DATE; V_NumberVal NUMBER; V_StringVal Varchar(100); BEGIN V_Status := DBMS_PIPE.RECIEVE_MESSAGE(v_PipeName); IF (v_Status !=0 THEN DBMS_OUTPUT.PUT_LINE(‘Error ‘||v_Status); END IF; DBMS_PIPE.UNPACK_MESSAGE(v_DateVal); DBMS_PIPE.UNPACK_MESSAGE(v_NumberVal); DBMS_PIPE.UNPACK_MESSAGE(v_StringVal); END;

11 DBMS_ALERT DECLARE V_AlertName VARCHAR2(30) := ‘MyAlert’; BEGIN DBMS_ALERT.SIGNAL(v_AlertName,’Alert!’); COMMIT; End;

12 DBMS_ALERT DECLARE V_AlertName VARCHAR2(30) := ‘MyAlert’; V_Message VARCHAR2(100); V_Status INTEGER; BEGIN DBMS_ALERT.REGISTER(v_AlertName); DBMS_ALERT.WAITONE(v_AlertName, v_Message,v_Status); IF v_Status = 0 THEN DBMS_OUTPUT.PUT_LINE(‘Receive ‘||v_Message); ELSE DBMS_OUTPUT.PUT_LINE(‘timeout’); End IF; End;

13 UTL_FILE DECLARE V_FileHandle UTL_FILE.FILE_TYPE; BEGIN V_FileHandle :=UTL_FILE.FOPEN(‘/tmp/’,’utl_file.txt’,’w’); UTL_FILE.PUT_LINE(v_FileHandle,’line1’); UTL_FILE.FCLOSE(v_FileHandle); END;

14 UTL_SMTP DECLARE V_FromAddr varchar2(50) := ‘hidden’; V_toAddr varchar2(50):= ‘admin@oracle.com’; V_Message varchar2(200); V_MailHost varchar2(50) := ‘localhost’; V_MailConnection UTL_SMTP.Connection; Begin V_Message :=‘From: ‘||v_FromAddr||CHR(10)||’Subject: TEST||CHR(10)||’Message body’; V_MailConnection := UTL_SMTP.OPEN_CONNECTION(v_MailHost); UTL_SMTP.HELO(v_MailConnection,v_MailHost); UTL_SMTP.MAIL(v_MailConnection,v_FromAddr); UTL_SMTP.RCPT(v_MailConnection,v_ToAddr); UTL_SMTP.DATA(v_MailConnection, v_Message); UTL_SMTP.QUIT(v_MailConnection); END;

15 UTL_HTTP CREATE TABLE http_results (sequence_no NUMBER PRIMARY KEY, pieceVARCHAR2(2000)); DECLARE V_Result UTL_HTTP.HTML_PIECES; V_URL VARCHAR2(100) :=‘http://www.oracle.com’; V_Proxy varchar2(100):=‘proxy.bsuir.by’; BEGIN V_Result:=UTL_HTTP.REQUEST_PIECES(v_URL,10,v_Proxy); FOR v_Count in 1..10 LOOP INSERT INTO http_results VALUES(v_Count,v_Result(v_Count)); END LOOP; END;

16 UTL_INADDR DECLARE V_HostName VARCHAR2(100) :=‘www.oracle.com’; V_HostAddr varchar2(100):=‘127.0.0.1’; BEGIN DBMS_OUTPUT.PUT_LINE(‘Address of ‘||v_HostName|| ‘ is ’ || UTL_INADDR.GET_HOST_ADDRESS(v_HostName)); DBMS_OUTPUT.PUT_LINE(‘Name of ‘||v_HostAddr|| ‘ is ’ || UTL_INADDR.GET_HOST_NAME(v_HostAddr)); END;

17 DBMS_JOB BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'simple_job', jobtype => 'PLSQL_BLOCK', job_action => 'UPDATE emp SET sal = sal +1;', enabled => TRUE ); END;

18 DBMS_JOB BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'simple_job', job_type => 'EXECUTABLE', jobaction => 'cmd.exe /C dir > \temp\out.txt', enabled => TRUE ); END;


Download ppt "PL/SQL. Процедуры CREATE [OR REPLACE] PROCEDURE имя_процедуры (имя_аргумента1 [режим1][NOCOPY] тип данных1[DEFAULT значение1],.., имя_аргументаN [режимN]"

Similar presentations


Ads by Google