Thursday, February 28, 2019

Use this for view and kill db session.

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';

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;
/

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;

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;