24.06.2008

PLSQL herkesin bilmesi gerekenler-2

Source kodu şifreleme

Yazdığınız kodları bodylerini şifrelememiz mümkündür. Zaten hazır gelen oracle paketlerinde şifrelemesi yapılmıstır.

Şifrelenmiş kodları user_source ile bakılsada ekranda görmemiz mümkün olmayacaktır.


WRAP INAME=.sql ONAME=.plb

WRAP INAME=exec_ddl.sql ONAME=exec_ddl.plb


CREATE OR REPLACE PROCEDURE exec_ddl (p_statement_txt
VARCHAR2) IS
lv_exec_cursor_num PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
lv_rows_processed_num PLS_INTEGER := 0;
BEGIN
DBMS_SQL.PARSE (lv_exec_cursor_num, p_statement_txt,
DBMS_SQL.NATIVE);
lv_rows_processed_num := DBMS_SQL.EXECUTE
(lv_exec_cursor_num);
DBMS_SQL.CLOSE_CURSOR (lv_exec_cursor_num);
EXCEPTION
WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN (lv_exec_cursor_num) THEN
DBMS_SQL.CLOSE_CURSOR (lv_exec_cursor_num);
END IF;
END exec_ddl;
/


CREATE OR REPLACE PROCEDURE exec_ddl wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd...




DECLARE
WRAPPED_TEXT VARCHAR2(1000);
BEGIN
WRAPPED_TEXT := 'CREATE PROCEDURE xyz AS BEGIN
DBMS_OUTPUT.PUT_LINE(''EXECUTED PROCEDURE XYZ''); END;';
DBMS_DDL.CREATE_WRAPPED(WRAPPED_TEXT);
END;



10gR2> EXECUTE XYZ
EXECUTED PROCEDURE XYZ
10gR2> SELECT * FROM USER_SOURCE WHERE NAME = 'XYZ';
NAME TYPE LINE TEXT
---------- ---------- ---------- ---------------------------
XYZ PROCEDURE 1 PROCEDURE xyz wrapped
a000000
b2
abcd
abcd
...

4-Autonomous Transactions

Bu yapı sayesinde bir transaction diğerinin içinde olmasına rağmen bağımsız çalışabilir.
Böylece commitlenmemiş bir kredi kartı işleminin bile audit benzeri bir tabloya yazılmasını sağlayabiliriz.


CREATE OR REPLACE PROCEDURE insert_product
(p_product_num VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO s_product
(product_id, product_name)
VALUES
(p_product_num, 'NEW PRODUCT');
COMMIT;
END;
/


BEGIN
INSERT INTO s_inventory
(warehouse_id, product_id)
VALUES
(10501, 10011);
insert_product(232);
ROLLBACK;
END;
/


sonuc
– Product 232 Inserted
– hic kayıt insert edlmiştir. s_inventory

Hiç yorum yok: