เช เชธเซเชเซเช เชฒเชเชตเชพ เชฎเชพเชเซเชจเซ เชชเซเชฐเซเชฐเชฃเชพ เชฒเซเช เชนเชคเซ
เชคเซ เชฐเชธเชชเซเชฐเชฆ เชฒเชพเชเซเชฏเซเช เชเซ เชคเซ เช เชตเชฟเชเชพเชฐ - "เชกเซเชเชพเชฌเซเชเชฎเชพเช เชตเซเชฏเชตเชธเชพเชฏ เชคเชฐเซเช เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเซ".
เชคเซ เชฎเชพเชคเซเชฐ เชนเซเช เช เชจเชนเซเชคเซ เชเซ เชฎเชจเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ.
เชเชชเชฐเชพเชเชค, เชญเชตเชฟเชทเซเชฏ เชฎเชพเชเซ, เชนเซเช, เชธเซ เชชเซเชฐเชฅเชฎ, เชฎเชพเชฐเชพ เชฎเชพเชเซ, เช เชฎเชฒเซเชเชฐเชฃ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชฆเซเชญเชตเชคเชพ เชฐเชธเชชเซเชฐเชฆ เชตเชฟเชเชพเชธเชจเซ เชธเชพเชเชตเชตเชพ เชฎเชพเชเชเชคเซ เชนเชคเซ. เชเชพเชธ เชเชฐเซเชจเซ เช เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเซเช เชเซ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชคเชพเชเซเชคเชฐเชฎเชพเช เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชฌเชฆเชฒเชตเชพ เช เชจเซ เชฌเชฟเชเชจเซเชธ เชฒเซเชเซเชเชจเซ เชฌเซเชเชเชจเซเชก เชฒเซเชตเชฒ เชชเชฐ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเชตเชพเชจเซ เชตเซเชฏเซเชนเชพเชคเซเชฎเช เชจเชฟเชฐเซเชฃเชฏ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ. เชเซเชฅเซ เชเซ เชฌเชงเซเช เชตเชฟเชเชธเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ เชคเซ เชเซเชเช เชธเชฎเชฏเชฎเชพเช เชเซเชเชจเชพ เชเชพเชฎเชฎเชพเช เชเชตเชถเซ เชจเชนเซเช เช เชจเซ เชเซเชเชจเชพ เชนเชฟเชคเชฎเชพเช เชฐเชนเซเชถเซ เชจเชนเซเช.
เชตเชฐเซเชฃเชตเซเชฒ เชชเชฆเซเชงเชคเชฟเช เช เชฎเซเช เชชเซเชฐเชเชพเชฐเชจเซ เชถเซเชง เช เชฅเชตเชพ เช เชชเชตเชพเชฆเชฐเซเชช เชจเชฅเซ. เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฃเซ, เชฌเชงเซเช เชเซเชฒเชพเชธเชฟเช เชเซ เช เชจเซ เชเชฃเซ เชตเชเชค เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฎเซเช 20 เชตเชฐเซเชท เชชเชนเซเชฒเชพเช Oracle เชชเชฐ เชธเชฎเชพเชจ เช เชญเชฟเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชนเชคเซ). เชฎเซเช เชนเชฎเชฃเชพเช เช เชฌเชงเซเช เชเช เชเชเซเชฏเชพเช เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชเชฟเชธเซเชธเชพเชฎเชพเช เชคเซ เชเซเชเชจเชพ เชฎเชพเชเซ เชนเชพเชฅเชฎเชพเช เชเชตเซ เชเซ. เชชเซเชฐเซเชเซเชเชฟเชธ เชฌเชคเชพเชตเซ เชเซ เชคเซเชฎ, เชเชฃเซ เชตเชพเชฐ เชเช เช เชตเชฟเชเชพเชฐ เช เชฒเช เช เชฒเช เชฒเซเชเซเชจเซ เชธเซเชตเชคเชเชคเซเชฐ เชฐเซเชคเซ เชเชตเซ เชเซ. เช เชจเซ เชคเซเชจเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชธเชเชญเชพเชฐเชฃเซเช เชคเชฐเซเชเซ เชฐเชพเชเชตเซเช เชเชชเชฏเซเชเซ เชเซ.
เช เชฒเชฌเชคเซเชค, เช เชตเชฟเชถเซเชตเชฎเชพเช เชเชเชเชชเชฃ เชธเชเชชเซเชฐเซเชฃ เชจเชฅเซ, เชญเซเชฒเซ เช เชจเซ เชเชพเชเชชเซ เชเชฎเชจเชธเซเชฌเซ เชถเชเซเชฏ เชเซ. เชเซเชเชพ เช เชจเซ เชเชฟเชชเซเชชเชฃเซเชเชจเซ เชญเชพเชฐเชชเซเชฐเซเชตเช เชเชตเชเชพเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เช เชชเซเชเซเชทเชฟเชค เชเซ. เช เชจเซ เชตเชงเซ เชเช เชจเชพเชจเซ เชตเชฟเชเชค - เชเซเชเซเชเชธ เช เชฎเชฒเซเชเชฐเชฃ เชตเชฟเชเชคเซ เช เชตเชเชฃเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเชฎ เชเชคเชพเช, เชตเชพเชธเซเชคเชตเชฟเช เชเชพเชฐเซเชฏเชเชพเชฐเซ เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชนเชเซ เชชเชฃ เชฌเชงเซเช เชตเชชเชฐเชพเชฏ เชเซ. เชคเซเชฅเซ, เชฒเซเช เชซเชเซเชค เชเช เชธเซเชเซเช เช เชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชเซเชฏเชพเชฒเชจเซเช เชตเชฐเซเชฃเชจ เชเซ, เชตเชงเซ เชเชเช เชจเชฅเซ. เชนเซเช เชเชถเชพ เชฐเชพเชเซเช เชเซเช เชเซ เชธเชฎเชเซเชฐ เชเชฟเชคเซเชฐเชจเซ เชธเชฎเชเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเซ เชตเชฟเชเชคเซ เชนเชถเซ.
เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเชเชพเชฐ เช เชเซ เชเซ "เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซ เช เชจเซ เชเซเชคเซ, เชเซเชชเชพเชตเซ เช เชจเซ เชชเซเชคเชพเชจเชพ เชเชฐเซ"
เช เชตเชฟเชเชพเชฐ เชเซเชฒเชพเชธเชฟเช เชเซ - เชเซเชทเซเชเชเซ เชฎเชพเชเซ เชเช เช
เชฒเช เชธเซเชเซเชฎเชพ, เชธเชเชเซเชฐเชนเชฟเชค เชเชพเชฐเซเชฏเซ เชฎเชพเชเซ เชเช เช
เชฒเช เชธเซเชเซเชฎเชพ.
เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชกเซเชเชพเชจเซ เชธเซเชงเซ เชเชเซเชธเซเชธ เชจเชฅเซ. เชเซเชฒเชพเชฏเชเช เชเซ เชเชฐเซ เชถเชเซ เชเซ เชคเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชพเชฐเซเชฏเชจเซ เชเซเชฒ เชเชฐเซ เชเซ เช
เชจเซ เชชเซเชฐเชพเชชเซเชค เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ.
เชญเซเชฎเชฟเชเชพเช
CREATE ROLE store;
CREATE ROLE sys_functions;
CREATE ROLE loc_audit_functions;
CREATE ROLE service_functions;
CREATE ROLE business_functions;
เชฏเซเชเชจเชพเช
เชเซเชฌเชฒ เชธเซเชเซเชฐเซเช เชฏเซเชเชจเชพ
เชฒเชเซเชทเซเชฏเชพเชเช เชเซเชทเซเชเชเซ เชเซ เชเซ เชตเชฟเชทเชฏ เชเชเชฎเซเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชเซ.
CREATE SCHEMA store AUTHORIZATION store ;
เชธเชฟเชธเซเชเชฎ เชซเชเชเซเชถเชจ เชกเชพเชฏเชพเชเซเชฐเชพเชฎ
เชธเชฟเชธเซเชเชฎเชจเชพ เชเชพเชฐเซเชฏเซ, เชเชพเชธ เชเชฐเซเชจเซ เชฒเซเชเชฟเชเช เชเซเชทเซเชเช เชซเซเชฐเชซเชพเชฐเซ เชฎเชพเชเซ.
CREATE SCHEMA sys_functions AUTHORIZATION sys_functions ;
เชธเซเชฅเชพเชจเชฟเช เชเชกเชฟเช เชฏเซเชเชจเชพ
เชธเชเชเซเชฐเชนเชฟเชค เชเชพเชฐเซเชฏเซเชจเชพ เช เชฎเชฒเซเชเชฐเชฃ เช เชจเซ เชฒเชเซเชทเซเชฏ เชเซเชทเซเชเชเซเชฎเชพเช เชซเซเชฐเชซเชพเชฐเซเชจเชพ เชธเซเชฅเชพเชจเชฟเช เชเชกเชฟเชเชฟเชเชเชจเชพ เช เชฎเชฒเซเชเชฐเชฃ เชฎเชพเชเซ เชเชพเชฐเซเชฏเซ เช เชจเซ เชเซเชทเซเชเชเซ.
CREATE SCHEMA loc_audit_functions AUTHORIZATION loc_audit_functions;
เชธเซเชตเชพ เชเชพเชฐเซเชฏ เชกเชพเชฏเชพเชเซเชฐเชพเชฎ
เชธเซเชตเชพ เช เชจเซ DML เชเชพเชฐเซเชฏเซ เชฎเชพเชเซเชจเชพ เชเชพเชฐเซเชฏเซ.
CREATE SCHEMA service_functions AUTHORIZATION service_functions;
เชฌเชฟเชเชจเซเชธ เชซเชเชเซเชถเชจ เชกเชพเชฏเชพเชเซเชฐเชพเชฎ
เชเซเชฒเชพเชฏเชเช เชฆเซเชตเชพเชฐเชพ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชคเชพ เช เชเชคเชฟเชฎ เชตเซเชฏเชตเชธเชพเชฏ เชเชพเชฐเซเชฏเซ เชฎเชพเชเซเชจเชพ เชเชพเชฐเซเชฏเซ.
CREATE SCHEMA business_functions AUTHORIZATION business_functions;
เชเชเซเชธเซเชธ เช เชงเชฟเชเชพเชฐเซ
เชญเซเชฎเชฟเชเชพ - DBA เชคเชฎเชพเชฎ เชธเซเชเซเชฎเชพเชจเซ เชธเชเชชเซเชฐเซเชฃ เชเชเซเชธเซเชธ เชงเชฐเชพเชตเซ เชเซ (DB เชฎเชพเชฒเชฟเชเชจเซ เชญเซเชฎเชฟเชเชพเชฅเซ เช เชฒเช).
CREATE ROLE dba_role;
GRANT store TO dba_role;
GRANT sys_functions TO dba_role;
GRANT loc_audit_functions TO dba_role;
GRANT service_functions TO dba_role;
GRANT business_functions TO dba_role;
เชญเซเชฎเชฟเชเชพ - เชฏเซเชเชฐ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐ เชงเชฐเชพเชตเซ เชเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชเซเชคเชฟเชฎเชพเช เชตเซเชฏเชตเชธเชพเชฏ_เชเชพเชฐเซเชฏเซ.
CREATE ROLE user_role;
เชฏเซเชเชจเชพเช เชตเชเซเชเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ
เช
เชจเซเชฆเชพเชจ
เชเชพเชฐเชฃ เชเซ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเซ เชฒเชเซเชทเชฃ เชธเชพเชฅเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ เชธเซเชฐเชเซเชทเชพ เชจเชฟเชฐเซเชงเชพเชฐเช เชเชฐเซเชฐเซ เชธเซเชเชจเชพเช เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเซ เชชเชฐ เช
เชฎเชฒ เชฐเชฆ เชเชฐเซ... เชเชพเชนเซเชฐเชฎเชพเชเชฅเซ;
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA sys_functions FROM public ;
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA loc_audit_functions FROM public ;
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA service_functions FROM public ;
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA business_functions FROM public ;
GRANT USAGE ON SCHEMA sys_functions TO dba_role ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA sys_functions TO dba_role ;
GRANT USAGE ON SCHEMA loc_audit_functions TO dba_role ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA loc_audit_functions TO dba_role ;
GRANT USAGE ON SCHEMA service_functions TO dba_role ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA service_functions TO dba_role ;
GRANT USAGE ON SCHEMA business_functions TO dba_role ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA business_functions TO dba_role ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA business_functions TO user_role ;
GRANT ALL PRIVILEGES ON SCHEMA store TO GROUP business_functions ;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA store TO business_functions ;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA store TO business_functions ;
เชคเซเชฅเซ เชกเซเชเชพเชฌเซเช เชธเซเชเซเชฎเชพ เชคเซเชฏเชพเชฐ เชเซ. เชคเชฎเซ เชกเซเชเชพ เชญเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ เชถเชเซ เชเซ.
เชฒเชเซเชทเซเชฏเชพเชเช เชเซเชทเซเชเชเซ
เชเซเชทเซเชเชเซ เชฌเชจเชพเชตเชตเซ เช เชคเซเชเซเช เชเซ. เชเซเช เชตเชฟเชถเชฟเชทเซเช เชธเซเชตเชฟเชงเชพเช, เชธเชฟเชตเชพเชฏ เชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชจ เชเชฐเชตเชพเชจเซ เชจเชฟเชฐเซเชฃเชฏ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชธเซเชฐเซเชฏเชฒ เช เชจเซ เชธเซเชชเชทเซเช เชฐเซเชคเซ เชธเชฟเชเซเชตเชจเซเชธ เชเชจเชฐเซเช เชเชฐเซ. เชเชชเชฐเชพเชเชค, เช เชฒเชฌเชคเซเชค, เชธเซเชเชจเชพเชเชจเซ เชฎเชนเชคเซเชคเชฎ เชเชชเชฏเซเช
COMMENT ON ...
เชฎเชพเชเซ เชเชฟเชชเซเชชเชฃเซเช ะฒัะตั เชตเชธเซเชคเซเช, เช เชชเชตเชพเชฆ เชตเชฟเชจเชพ.
เชธเซเชฅเชพเชจเชฟเช เชเชกเชฟเช
เชธเชเชเซเชฐเชนเชฟเชค เชเชพเชฐเซเชฏเซเชจเชพ เช เชฎเชฒ เช เชจเซ เชฒเชเซเชทเซเชฏ เชเซเชทเซเชเชเซเชฎเชพเช เชซเซเชฐเชซเชพเชฐเซเชจเซ เชฒเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชธเซเชฅเชพเชจเชฟเช เชเชกเชฟเช เชเซเชทเซเชเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซเชฎเชพเช เช เชจเซเชฏ เชตเชธเซเชคเซเชเชจเซ เชธเชพเชฅเซ, เชเซเชฒเชพเชฏเชเช เชเชจเซเชเซเชถเชจเชจเซ เชตเชฟเชเชคเซ, เชเชนเซเชตเชพเชคเชพ เชฎเซเชกเซเชฏเซเชฒเชจเซเช เชฒเซเชฌเชฒ เช เชจเซ เชเชจเชชเซเชเชจเชพ เชตเชพเชธเซเชคเชตเชฟเช เชฎเซเชฒเซเชฏเซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. JSON เชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชเชเชเชชเซเช เชชเชฐเชฟเชฎเชพเชฃเซ.
เชธเชฟเชธเซเชเชฎ เชเชพเชฐเซเชฏเซ
เชฒเชเซเชทเซเชฏ เชเซเชทเซเชเชเซเชฎเชพเช เชฒเซเชเซเชเช เชซเซเชฐเชซเชพเชฐเซ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชเซ. เชคเซเช เชเซเชฐเชฟเชเชฐ เชเชพเชฐเซเชฏเซ เชเซ.
เชเซเชฎเซเชชเชฒเซเช - เชธเชฟเชธเซเชเชฎ เชเชพเชฐเซเชฏ
---------------------------------------------------------
-- INSERT
CREATE OR REPLACE FUNCTION sys_functions.table_insert_log ()
RETURNS TRIGGER AS $$
BEGIN
PERFORM loc_audit_functions.make_log( ' '||'table' , 'insert' , json_build_object('id', NEW.id) );
RETURN NULL ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE TRIGGER table_after_insert AFTER INSERT ON storage.table FOR EACH ROW EXECUTE PROCEDURE sys_functions.table_insert_log();
---------------------------------------------------------
-- UPDATE
CREATE OR REPLACE FUNCTION sys_functions.table_update_log ()
RETURNS TRIGGER AS $$
BEGIN
IF OLD.column != NEW.column
THEN
PERFORM loc_audit_functions.make_log( ' '||'table' , 'update' , json_build_object('OLD.column', OLD.column , 'NEW.column' , NEW.column ) );
END IF ;
RETURN NULL ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE TRIGGER table_after_update AFTER UPDATE ON storage.table FOR EACH ROW EXECUTE PROCEDURE sys_functions.table_update_log ();
---------------------------------------------------------
-- DELETE
CREATE OR REPLACE FUNCTION sys_functions.table_delete_log ()
RETURNS TRIGGER AS $$
BEGIN
PERFORM loc_audit_functions.make_log( ' '||'table' , 'delete' , json_build_object('id', OLD.id ) );
RETURN NULL ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE TRIGGER table_after_delete AFTER DELETE ON storage.table FOR EACH ROW EXECUTE PROCEDURE sys_functions.table_delete_log ();
เชธเซเชตเชพ เชเชพเชฐเซเชฏเซ
เชฒเชเซเชทเซเชฏ เชเซเชทเซเชเชเซ เชชเชฐ เชธเซเชตเชพ เช เชจเซ DML เชเชพเชฎเชเซเชฐเซเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชเซ.
เชเซเชฎเซเชชเชฒเซเช - เชธเซเชตเชพ เชเชพเชฐเซเชฏ
--INSERT
--RETURN id OF NEW ROW
CREATE OR REPLACE FUNCTION service_functions.table_insert ( new_column store.table.column%TYPE )
RETURNS integer AS $$
DECLARE
new_id integer ;
BEGIN
-- Generate new id
new_id = nextval('store.table.seq');
-- Insert into table
INSERT INTO store.table
(
id ,
column
)
VALUES
(
new_id ,
new_column
);
RETURN new_id ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
--DELETE
--RETURN ROW NUMBERS DELETED
CREATE OR REPLACE FUNCTION service_functions.table_delete ( current_id integer )
RETURNS integer AS $$
DECLARE
rows_count integer ;
BEGIN
DELETE FROM store.table WHERE id = current_id;
GET DIAGNOSTICS rows_count = ROW_COUNT;
RETURN rows_count ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- UPDATE DETAILS
-- RETURN ROW NUMBERS UPDATED
CREATE OR REPLACE FUNCTION service_functions.table_update_column
(
current_id integer
,new_column store.table.column%TYPE
)
RETURNS integer AS $$
DECLARE
rows_count integer ;
BEGIN
UPDATE store.table
SET
column = new_column
WHERE id = current_id;
GET DIAGNOSTICS rows_count = ROW_COUNT;
RETURN rows_count ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
เชตเซเชฏเชพเชชเชพเชฐ เชเชพเชฐเซเชฏเซ
เชเซเชฒเชพเชฏเชเช เชฆเซเชตเชพเชฐเชพ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชคเชพ เช เชเชคเชฟเชฎ เชตเซเชฏเชตเชธเชพเชฏ เชเชพเชฐเซเชฏเซ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชเซ. เชคเซเช เชนเชเชฎเซเชถเชพ เชชเชพเชเชพ เชซเชฐเซ เชเซ - JSON. เชเชเซเชเซเชเซเชฏเซเชถเชจ เชญเซเชฒเซเชจเซ เช เชเชเชพเชตเชตเชพ เช เชจเซ เชฒเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชฌเซเชฒเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชฌเชพเชเชพเชค.
เชเซเชฎเซเชชเชฒเซเช - เชฌเชฟเชเชจเซเชธ เชซเชเชเซเชถเชจ
CREATE OR REPLACE FUNCTION business_functions.business_function_template(
--Input parameters
)
RETURNS JSON AS $$
DECLARE
------------------------
--for exception catching
error_message text ;
error_json json ;
result json ;
------------------------
BEGIN
--LOGGING
PERFORM loc_audit_functions.make_log
(
'business_function_template',
'STARTED',
json_build_object
(
--IN Parameters
)
);
PERFORM business_functions.notice('business_function_template');
--START BUSINESS PART
--END BUSINESS PART
-- SUCCESFULLY RESULT
PERFORM business_functions.notice('result');
PERFORM business_functions.notice(result);
PERFORM loc_audit_functions.make_log
(
'business_function_template',
'FINISHED',
json_build_object( 'result',result )
);
RETURN result ;
----------------------------------------------------------------------------------------------------------
-- EXCEPTION CATCHING
EXCEPTION
WHEN OTHERS THEN
PERFORM loc_audit_functions.make_log
(
'business_function_template',
'STARTED',
json_build_object
(
--IN Parameters
) , TRUE );
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR',
json_build_object('SQLSTATE',SQLSTATE ), TRUE
);
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR',
json_build_object('SQLERRM',SQLERRM ), TRUE
);
GET STACKED DIAGNOSTICS error_message = RETURNED_SQLSTATE ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-RETURNED_SQLSTATE',json_build_object('RETURNED_SQLSTATE',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = COLUMN_NAME ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-COLUMN_NAME',
json_build_object('COLUMN_NAME',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = CONSTRAINT_NAME ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-CONSTRAINT_NAME',
json_build_object('CONSTRAINT_NAME',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = PG_DATATYPE_NAME ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-PG_DATATYPE_NAME',
json_build_object('PG_DATATYPE_NAME',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = MESSAGE_TEXT ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-MESSAGE_TEXT',json_build_object('MESSAGE_TEXT',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = SCHEMA_NAME ;
PERFORM loc_audit_functions.make_log
(s
'business_function_template',
' ERROR-SCHEMA_NAME',json_build_object('SCHEMA_NAME',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = PG_EXCEPTION_DETAIL ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-PG_EXCEPTION_DETAIL',
json_build_object('PG_EXCEPTION_DETAIL',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = PG_EXCEPTION_HINT ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-PG_EXCEPTION_HINT',json_build_object('PG_EXCEPTION_HINT',error_message ), TRUE );
GET STACKED DIAGNOSTICS error_message = PG_EXCEPTION_CONTEXT ;
PERFORM loc_audit_functions.make_log
(
'business_function_template',
' ERROR-PG_EXCEPTION_CONTEXT',json_build_object('PG_EXCEPTION_CONTEXT',error_message ), TRUE );
RAISE WARNING 'ALARM: %' , SQLERRM ;
SELECT json_build_object
(
'isError' , TRUE ,
'errorMsg' , SQLERRM
) INTO error_json ;
RETURN error_json ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
เชชเชฐเชฟเชฃเชพเชฎ
เชธเชพเชฎเชพเชจเซเชฏ เชเชฟเชคเซเชฐเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเชจเซ เชฒเชพเชเซ เชเซ เชเซ เชคเซ เชคเชฆเซเชฆเชจ เชชเชฐเซเชฏเชพเชชเซเชค เชเซ. เชเซ เชเซเชเชจเซ เชตเชฟเชเชคเซ เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเซเชฎเชพเช เชฐเชธ เชนเซเชฏ, เชคเซ เชเชฟเชชเซเชชเชฃเซเช เชฒเชเซ, เชฎเชจเซ เชเชฟเชคเซเชฐเชฎเชพเช เชตเชงเชพเชฐเชพเชจเชพ เชธเซเชชเชฐเซเชถ เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเซเชถเซ เชฅเชถเซ.
PS
เชเช เชธเชฐเชณ เชญเซเชฒ เชฒเซเชเซเชเช - เชเชจเชชเซเช เชชเชฐเชฟเชฎเชพเชฃ เชชเซเชฐเชเชพเชฐ
-[ RECORD 1 ]- date_trunc | 2020-08-19 13:15:46 id | 1072 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | STARTED jsonb_pretty | { | "dko": { | "id": 4, | "type": "Type1", | "title": "CREATED BY addKD", | "Weight": 10, | "Tr": "300", | "reduction": 10, | "isTrud": "TRUE", | "description": "decription", | "lowerTr": "100", | "measurement": "measurement1", | "methodology": "m1", | "passportUrl": "files", | "upperTr": "200", | "weightingFactor": 100.123, | "actualTrValue": null, | "upperTrCalcNumber": "120" | }, | "CardId": 3 | } -[ RECORD 2 ]- date_trunc | 2020-08-19 13:15:46 id | 1073 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR jsonb_pretty | { | "SQLSTATE": "22P02" | } -[ RECORD 3 ]- date_trunc | 2020-08-19 13:15:46 id | 1074 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR jsonb_pretty | { | "SQLERRM": "invalid input syntax for type numeric: "null"" | } -[ RECORD 4 ]- date_trunc | 2020-08-19 13:15:46 id | 1075 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-RETURNED_SQLSTATE jsonb_pretty | { | "RETURNED_SQLSTATE": "22P02" | } -[ RECORD 5 ]- date_trunc | 2020-08-19 13:15:46 id | 1076 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-COLUMN_NAME jsonb_pretty | { | "COLUMN_NAME": "" | } -[ RECORD 6 ]- date_trunc | 2020-08-19 13:15:46 id | 1077 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-CONSTRAINT_NAME jsonb_pretty | { | "CONSTRAINT_NAME": "" | } -[ RECORD 7 ]- date_trunc | 2020-08-19 13:15:46 id | 1078 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-PG_DATATYPE_NAME jsonb_pretty | { | "PG_DATATYPE_NAME": "" | } -[ RECORD 8 ]- date_trunc | 2020-08-19 13:15:46 id | 1079 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-MESSAGE_TEXT jsonb_pretty | { | "MESSAGE_TEXT": "invalid input syntax for type numeric: "null"" | } -[ RECORD 9 ]- date_trunc | 2020-08-19 13:15:46 id | 1080 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-SCHEMA_NAME jsonb_pretty | { | "SCHEMA_NAME": "" | } -[ RECORD 10 ]- date_trunc | 2020-08-19 13:15:46 id | 1081 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-PG_EXCEPTION_DETAIL jsonb_pretty | { | "PG_EXCEPTION_DETAIL": "" | } -[ RECORD 11 ]- date_trunc | 2020-08-19 13:15:46 id | 1082 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-PG_EXCEPTION_HINT jsonb_pretty | { | "PG_EXCEPTION_HINT": "" | } -[ RECORD 12 ]- date_trunc | 2020-08-19 13:15:46 id | 1083 usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-PG_EXCEPTION_CONTEXT jsonb_pretty | { usename | emp1 log_module | addKD log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a status | ERROR-MESSAGE_TEXT jsonb_pretty | { | "MESSAGE_TEXT": "invalid input syntax for type numeric: "null"" | }
เชธเซเชฐเซเชธ: www.habr.com