Вопрос: Как объявить курсор и как работать с ним?
Решение:
CREATE OR REPLACE PROCEDURE "my_cur_example" AS cursor cur is select myCol1, myCol2 from myTable; BEGIN FOR rec IN cur LOOP EXIT WHEN cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE(rec.myCol1); END LOOP; END;
Вопрос: Как увеличить размер буфера для DBMS_OUTPUT и избавиться от ошибки ORA-20000: ORU-10027: buffer overflow, limit of 20000 bytes?
Решение:
DBMS_OUTPUT.ENABLE(1000000);
Вопрос: Как вырезать подстроку?
Решение:
select substr('Devtype', 1, 3) from dual; -- would return 'Dev'
Вопрос: Как объявить числовую переменную и присвоить ей значение?
Решение:
CREATE OR REPLACE PROCEDURE "example_proc" AS nCount NUMBER; BEGIN nCount := 0; END;
Вопрос: Как организовать лог в PL/SQL процедурах?
Решение:
1) Создать таблицу в которой будет храниться лог:
CREATE TABLE "LOG_DATA" ( "LOG_ID" NUMBER(19) NOT NULL , "LOG_DATE" TIMESTAMP(6) NOT NULL , "LOG_STATUS" VARCHAR2(512 BYTE) NULL, "LOG_TAG" VARCHAR2(24 BYTE) NULL ) LOGGING NOCOMPRESS NOCACHE; ALTER TABLE "LOG_DATA" ADD CHECK ("LOG_ID" IS NOT NULL); ALTER TABLE "LOG_DATA" ADD CHECK ("LOG_DATE" IS NOT NULL); ALTER TABLE "LOG_DATA" ADD PRIMARY KEY ("LOG_ID");2) Создать процедуру для записи в таблицу лога:
CREATE OR REPLACE PROCEDURE "log_write"(log_id NUMBER, status VARCHAR2, tag VARCHAR2) AS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO LOG_DATA VALUES(log_id, SYSDATE, status, tag); COMMIT; END;3) Вызывать процедуру log_write из собственных процедур.
...