SELECT
O.OBJECT_NAME,
S.SID,
S.SERIAL#,
P.SPID,
S.PROGRAM,
SQ.SQL_FULLTEXT,
S.LOGON_TIME
FROM
V$LOCKED_OBJECT L,
DBA_OBJECTS O,
V$SESSION S,
V$PROCESS P,
V$SQL SQ
WHERE
L.OBJECT_ID = O.OBJECT_ID
AND L.SESSION_ID = S.SID
AND S.PADDR = P.ADDR
AND S.SQL_ADDRESS = SQ.ADDRESS;
alter system kill session '146,2158';
Oracle PL/SQL helper
Thursday, February 28, 2019
Wednesday, July 17, 2013
Run oracle function using Dual
Say you have a function called FUNCTION_TEST with M number of parameters.You can get return value of function easily as follows.
SELECT
FUNCTION_TEST(PARAMETER_1,PARAMETER_2,....PARAMETER_M)
AS
RETURN_VALUE
FROM
DUAL
Monday, June 17, 2013
Oracle Pl/Sql Trigger
Simple trigger when Insert,Update and Delete a record.Normally trigger use for several scenarios and following example shows adding a rerecord to history table for one of scenario described in above.
CREATE OR REPLACE TRIGGER CCBS2.TRIG_IUD_TEMP_TABLE_SAMPLE
AFTER
INSERT OR UPDATE OR DELETE
ON TEMP_TABLE_SAMPLE REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
vc_operation VARCHAR2(10) := NULL;--this used for handle scenarios
wk_Field1 TEMP_TABLE_SAMPLE.Field1%type;
wk_Field2 TEMP_TABLE_SAMPLE.Field2%type;
wk_Field3 TEMP_TABLE_SAMPLE.Field3%type;
wk_reason varchar2(30);
BEGIN
IF INSERTING THEN
vc_operation := 'INSERT';
wk_Field1 := :NEW.Field1;
wk_Field2 := :NEW.Field2;
wk_Field3 := :NEW.Field3;
wk_reason := 'Inserting record';
END IF;
IF UPDATING THEN
vc_operation := 'UPDATE';
wk_Field1 := :NEW.Field1;
wk_Field2 := :NEW.Field2;
wk_Field3 := :NEW.Field3;
wk_reason := 'Updating record';
END IF;
IF DELETING THEN
vc_operation := 'DELETE';
wk_Field1 := :NEW.Field1;
wk_Field2 := :NEW.Field2;
wk_Field3 := :NEW.Field3;
wk_reason := 'deleting records';
END IF;
BEGIN
INSERT INTO CCBS2.TEMP_TABLE_SAMPLE_H( Field1_h,
Field2_h,
Field3_h
)
VALUES ( wk_Field1,
wk_Field2,
wk_Field3
);
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
END;
/
CREATE OR REPLACE TRIGGER CCBS2.TRIG_IUD_TEMP_TABLE_SAMPLE
AFTER
INSERT OR UPDATE OR DELETE
ON TEMP_TABLE_SAMPLE REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
vc_operation VARCHAR2(10) := NULL;--this used for handle scenarios
wk_Field1 TEMP_TABLE_SAMPLE.Field1%type;
wk_Field2 TEMP_TABLE_SAMPLE.Field2%type;
wk_Field3 TEMP_TABLE_SAMPLE.Field3%type;
wk_reason varchar2(30);
BEGIN
IF INSERTING THEN
vc_operation := 'INSERT';
wk_Field1 := :NEW.Field1;
wk_Field2 := :NEW.Field2;
wk_Field3 := :NEW.Field3;
wk_reason := 'Inserting record';
END IF;
IF UPDATING THEN
vc_operation := 'UPDATE';
wk_Field1 := :NEW.Field1;
wk_Field2 := :NEW.Field2;
wk_Field3 := :NEW.Field3;
wk_reason := 'Updating record';
END IF;
IF DELETING THEN
vc_operation := 'DELETE';
wk_Field1 := :NEW.Field1;
wk_Field2 := :NEW.Field2;
wk_Field3 := :NEW.Field3;
wk_reason := 'deleting records';
END IF;
BEGIN
INSERT INTO CCBS2.TEMP_TABLE_SAMPLE_H( Field1_h,
Field2_h,
Field3_h
)
VALUES ( wk_Field1,
wk_Field2,
wk_Field3
);
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
END;
/
Oracle - PL/SQL Query
How to get values from filtered query using as a from table(Select clause withing another select clause for same fields) - Nested Query
SELECT TEMP_QUERY.Field1,
TEMP_QUERY.Field2
FROM (SELECT Field1, Field2 FROM TEST_TABLE
AND Field1 = 'TEST_VAL'
end_date IS NOT NULL
ORDER BY end_date) TEMP_QUERY
WHERE rownum = 1;
SELECT TEMP_QUERY.Field1,
TEMP_QUERY.Field2
FROM (SELECT Field1, Field2 FROM TEST_TABLE
AND Field1 = 'TEST_VAL'
end_date IS NOT NULL
ORDER BY end_date) TEMP_QUERY
WHERE rownum = 1;
Thursday, May 30, 2013
PL/SQL : procedural language / Structured Query Language
HI,
Here is simple sample client for IN OUT procedure,Say procedure name called DB_SCHEMA.DB_PACKAGE.DB_API_NAME and has 3 parameters are INOUT_CXLIST, P_STARTDATE, P_ENDDATE, P_CXCATEGORY.Assume this API return ref_cursor and it contains 14 fields.Following is the sample PL/SQL client for printing values from cursor
DECLARE
INOUT_CXLIST SYS_REFCURSOR;
P_STARTDATE VARCHAR2(200);
P_ENDDATE VARCHAR2(200);
P_CXCATEGORY VARCHAR2(200);
TYPE MYREC IS RECORD(
COL1 VARCHAR2(140),
COL2 VARCHAR2(140),
COL3 VARCHAR2(120),
COL4 VARCHAR2(140),
COL5 VARCHAR2(140),
COL6 VARCHAR2(140),
COL7 VARCHAR2(140),
COL8 VARCHAR2(140),
COL9 VARCHAR2(140),
COL10 VARCHAR2(140),
COL11 VARCHAR2(140),
COL12 VARCHAR2(140),
COL13 VARCHAR2(140),
COL14 VARCHAR2(140));
REC MYREC;
BEGIN
P_STARTDATE := '20130201';
P_ENDDATE := '20130202';
P_CXCATEGORY := 'GSM';
DB_SCHEMA.DB_PACKAGE.DB_API_NAME(INOUT_CXLIST, P_STARTDATE, P_ENDDATE, P_CXCATEGORY );
-- COMMIT;
LOOP
FETCH INOUT_CXLIST
INTO REC;
EXIT WHEN INOUT_CXLIST%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(REC.COL1 || ',' || REC.COL2 || ',' || REC.COL3 || ',' ||
REC.COL4);
END LOOP;
END;
Here is simple sample client for IN OUT procedure,Say procedure name called DB_SCHEMA.DB_PACKAGE.DB_API_NAME and has 3 parameters are INOUT_CXLIST, P_STARTDATE, P_ENDDATE, P_CXCATEGORY.Assume this API return ref_cursor and it contains 14 fields.Following is the sample PL/SQL client for printing values from cursor
DECLARE
INOUT_CXLIST SYS_REFCURSOR;
P_STARTDATE VARCHAR2(200);
P_ENDDATE VARCHAR2(200);
P_CXCATEGORY VARCHAR2(200);
TYPE MYREC IS RECORD(
COL1 VARCHAR2(140),
COL2 VARCHAR2(140),
COL3 VARCHAR2(120),
COL4 VARCHAR2(140),
COL5 VARCHAR2(140),
COL6 VARCHAR2(140),
COL7 VARCHAR2(140),
COL8 VARCHAR2(140),
COL9 VARCHAR2(140),
COL10 VARCHAR2(140),
COL11 VARCHAR2(140),
COL12 VARCHAR2(140),
COL13 VARCHAR2(140),
COL14 VARCHAR2(140));
REC MYREC;
BEGIN
P_STARTDATE := '20130201';
P_ENDDATE := '20130202';
P_CXCATEGORY := 'GSM';
DB_SCHEMA.DB_PACKAGE.DB_API_NAME(INOUT_CXLIST, P_STARTDATE, P_ENDDATE, P_CXCATEGORY );
-- COMMIT;
LOOP
FETCH INOUT_CXLIST
INTO REC;
EXIT WHEN INOUT_CXLIST%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(REC.COL1 || ',' || REC.COL2 || ',' || REC.COL3 || ',' ||
REC.COL4);
END LOOP;
END;
Subscribe to:
Posts (Atom)