Showing posts with label SQL. Show all posts
Showing posts with label SQL. Show all posts

Wednesday, March 15, 2017

Using SQL Loader

1. Create Table 

CREATE TABLE H1BCASE_DATA
( CASE_SL             NUMBER(10),
  CASE_STATUS         VARCHAR2(1000 BYTE),
  EMPLOYER_NAME       VARCHAR2(1000 BYTE),
  SOC_NAME            VARCHAR2(1000 BYTE),
  JOB_TITLE           VARCHAR2(1000 BYTE),
  FULL_TIME_POSITION  VARCHAR2(1000 BYTE),
  PREVAILING_WAGE     VARCHAR2(1000 BYTE),
  YEAR                VARCHAR2(1000 BYTE),
  WORKSITE            VARCHAR2(1000 BYTE),
  LON                 VARCHAR2(1000 BYTE),
  LAT                 VARCHAR2(1000 BYTE)
);

2. Create ctl file.

bash-4.3$ vi h1b_kaggle.ctl

LOAD DATA
INFILE '/home/oracle/h1b_kaggle.csv'
BADFILE '/home/oracle/h1b_kaggle.bad'
DISCARDFILE '/home/oracle/h1b_kaggle.dsc'
INSERT INTO TABLE H1BCASE_DATA
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(CASE_SL, CASE_STATUS, EMPLOYER_NAME, SOC_NAME, JOB_TITLE, FULL_TIME_POSITION, PREVAILING_WAGE, YEAR, WORKSITE, LON, LAT)

3. Load data into table 

bash-4.3$ sqlldr userid=HR/HR control=h1b_kaggle.ctl log=h1b_kaggle.log

Sunday, February 19, 2017

Split word from sentence using oracle SQL Query

SQL> SELECT LEVEL, REGEXP_SUBSTR('RAJIB NARSINGDI DHAKA BANGLADESH','[^ ]+', 1, LEVEL) FROM DUAL
 CONNECT BY REGEXP_SUBSTR('RAJIB NARSINGDI DHAKA BANGLADESH', '[^ ]+', 1, LEVEL) IS NOT NULL;  2

     LEVEL REGEXP_SUBSTR('RAJIBNARSINGDIDHA
---------- --------------------------------
         1 RAJIB
         2 NARSINGDI
         3 DHAKA
         4 BANGLADESH

SQL> SELECT ROWNUM SL, EXTRACTVALUE(XT.COLUMN_VALUE, 'e') COLUMN_VALUES
  2              FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<coll><e>' ||
  3                                                     REPLACE(REPLACE(REPLACE('RAJIB NARSINGDI DHAKA BANGLADESH','&',''),':',''),
  4                                                             ' ',
  5                                                             '</e><e>') ||
  6                                                     '</e></coll>'),
  7                                             '/coll/e'))) XT;

     SL COLUMN_VALUES
---------- --------------------------------
         1 RAJIB
         2 NARSINGDI
         3 DHAKA
         4 BANGLADESH

SQL>

Monday, July 25, 2016

Find out the difference between the latest value and second latest value.


SELECT EVENT_TYPE, VALUE - LATEST_VALUE "Value"
  FROM (SELECT ROWNUMBER,
               EVENT_TYPE,
               VALUE,
               NVL (
                  LAG (VALUE, 1)
                     OVER (PARTITION BY EVENT_TYPE ORDER BY EVENT_TYPE, TIME),
                  0)
                  AS LATEST_VALUE,
               TIME
          FROM (  SELECT ROW_NUMBER ()
                         OVER (PARTITION BY EVENT_TYPE
                               ORDER BY EVENT_TYPE, TIME DESC)
                            AS ROWNUMBER,
                         EVENT_TYPE,
                         VALUE,
                         TIME
                    FROM EVENTS
                ORDER BY EVENT_TYPE, TIME DESC)
         WHERE ROWNUMBER < 3)
 WHERE LATEST_VALUE > 0;

Data Preparation 

CREATE TABLE EVENTS
(
  EVENT_TYPE  INTEGER                           NOT NULL,
  VALUE       INTEGER                           NOT NULL,
  TIME        TIMESTAMP(6)                      NOT NULL
);

SET DEFINE OFF;
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (2, 5, TO_TIMESTAMP('7/25/2016 4:27:27.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (2, 13, TO_TIMESTAMP('7/25/2016 4:28:44.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (2, 34, TO_TIMESTAMP('7/25/2016 4:28:50.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (4, 42, TO_TIMESTAMP('7/25/2016 4:27:44.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (5, 4, TO_TIMESTAMP('7/25/2016 4:31:56.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (5, 12, TO_TIMESTAMP('7/25/2016 4:31:53.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (5, 34, TO_TIMESTAMP('7/25/2016 4:31:50.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (5, 12, TO_TIMESTAMP('7/25/2016 4:27:50.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
INSERT INTO EVENTS
   (EVENT_TYPE, VALUE, TIME)
 VALUES
   (7, 13, TO_TIMESTAMP('7/25/2016 4:27:56.000000 PM','fmMMfm/fmDDfm/YYYY fmHH12fm:MI:SS.FF AM'));
COMMIT;

Thursday, March 31, 2016

SQL Tuning Advisor for Single SQL Statement.

SQL Tuning Advisor help us to find out the problem of SQL Statement Execution. SQL Tuning Advisory can run for single SQL Statement using SQL_ID. You can find SQL_ID from GV$SQLAREA View of GV$SQL View. After finding SQL ID perform the following steps for running SQL Tuning Advisory.

1. Create SQL Tuning Advisor Task.

DECLARE
   my_task_name   VARCHAR2 (30);
BEGIN
   my_task_name :=
      DBMS_SQLTUNE.CREATE_TUNING_TASK (sql_id        => '5yshyjm21hhfs',
                                       scope         => 'COMPREHENSIVE',
                                       time_limit    => 60,
                                       task_name     => 'STA:5yshyjm21hhfs',
                                       description   => '5yshyjm21hhfs');
END;

2. Executing SQL Tuning Task.

EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'STA:5yshyjm21hhfs');

3. The Result of SQL Tuning Advisory.

SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('STA:5yshyjm21hhfs') from dual;

Exercise
==========================

SQL> DECLARE
  MY_TASK_NAME VARCHAR2(30);
BEGIN
  MY_TASK_NAME := DBMS_SQLTUNE.CREATE_TUNING_TASK(SQL_ID => '5yshyjm21hhfs',SCOPE => 'COMPREHENSIVE',TIME_LIMIT => 60,TASK_NAME => 'sql_stat:5yshyjm21hhfs',DESCRIPTION => '5yshyjm21hhfs');
END;

/

PL/SQL procedure successfully completed.

SQL> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'sql_stat:5yshyjm21hhfs');

PL/SQL procedure successfully completed.

SQL>
SQL> SET LONG 10000
SQL> SET PAGESIZE 1000
SQL> SET LINESIZE 200
SQL>
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('sql_stat:5yshyjm21hhfs') from dual;

DBMS_SQLTUNE.REPORT_TUNING_TASK('SQL_STAT:5YSHYJM21HHFS')
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name   : sql_stat:5yshyjm21hhfs
Tuning Task Owner  : SYS
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status  : COMPLETED
Started at         : 03/31/2016 17:01:41
Completed at       : 03/31/2016 17:01:42

-------------------------------------------------------------------------------
Schema Name: RBL_SUPPORT
SQL ID     : 5yshyjm21hhfs
SQL Text   : SELECT ACC_NUMBER, ACC_DATE, TRAN_AMOUNT
                                                 FROM ACNUM P,
             AC_BAL T
                                                 WHERE
             P.ACC_NUMBER=T.ACC_NUMBER
                                                 AND ACC_KEY = :1
                                                 AND ACC_DATE BETWEEN
             DFU_GET_CURR_MONTH_STARTDATE(:ACC_KEY, CASE WHEN
             NVL(P.TRAN_VALUE_DT,:V_CURRENT_DATE)<:V_CURRENT_DATE THEN
             P.TRAN_VALUE_DT ELSE :V_CURRENT_DATE END) AND

             DFU_GET_CURR_MONTH_ENDTDATE(:ACC_KEY,DFU_GET_CURR_MONTH_STA
             RTDATE(:ACC_KEY, CASE WHEN
             NVL(P.TRAN_VALUE_DT,:V_CURRENT_DATE)<:V_CURRENT_DATE THEN
             P.TRAN_VALUE_DT ELSE :V_CURRENT_DATE END))
                                                 AND ACC_DATE <= :6
Bind Variables :
 1 -  (NUMBER):1
 2 -  (NUMBER):1
 3 -  (DATE):03/31/2016 00:00:00
 4 -  (DATE):03/31/2016 00:00:00
 5 -  (DATE):03/31/2016 00:00:00
 6 -  (NUMBER):1
 7 -  (NUMBER):1
 8 -  (DATE):03/31/2016 00:00:00
 9 -  (DATE):03/31/2016 00:00:00
 10 -  (DATE):03/31/2016 00:00:00
 11 -  (DATE):03/31/2016 00:00:00

-------------------------------------------------------------------------------
FINDINGS SECTION (1 finding)
-------------------------------------------------------------------------------

1- Alternative Plan Finding
---------------------------
  Some alternative execution plans for this statement were found by searching
  the system's real-time and historical performance data.

  The following table lists these plans ranked by their average elapsed time.
  See section "ALTERNATIVE PLANS SECTION" for detailed information on each
  plan.

  id plan hash  last seen            elapsed (s)  origin          note

  -- ---------- -------------------- ------------ --------------- --------------
--
   1 2650109619  2016-03-31/16:11:43       48.718 Cursor Cache


  Information
  -----------
  - Because no execution history for the Original Plan was found, the SQL
    Tuning Advisor could not determine if any of these execution plans are
    superior to it.  However, if you know that one alternative plan is better
    than the Original Plan, you can create a SQL plan baseline for it. This
    will instruct the Oracle optimizer to pick it over any other choices in
    the future.
    execute dbms_sqltune.create_sql_plan_baseline(task_name =>
            'sql_stat:5yshyjm21hhfs', owner_name => 'SYS', plan_hash_value =>
            xxxxxxxx);

-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------

1- Original
-----------
Plan hash value: 2489994495

--------------------------------------------------------------------------------
--------------------------
| Id  | Operation                       | Name                   | Rows  | Bytes
 | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
--------------------------
|   0 | SELECT STATEMENT                |                        |     1 |    47
 |     4   (0)| 00:00:01 |
|   1 |  NESTED LOOPS                   |                        |     1 |    47
 |     4   (0)| 00:00:01 |
|   2 |   NESTED LOOPS                  |                        |     1 |    47
 |     4   (0)| 00:00:01 |
|*  3 |    TABLE ACCESS FULL            | ACNUM              |     1 |    22
 |     2   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN             | IDX_AC_BAL |     1 |
 |     2   (0)| 00:00:01 |
|*  5 |   MAT_VIEW ACCESS BY INDEX ROWID| AC_BAL     |     1 |    25
 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------
--------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("DFU_GET_CURR_MONTH_STARTDATE"(:ACC_KEY,CASE  WHEN
              NVL("P"."TRAN_VALUE_DT",:V_CURRENT_DATE)<:V_CURRENT_DATE THEN "P".
"TRAN_VALUE_DT" ELSE
              :V_CURRENT_DATE END )<=:6)
   4 - access("P"."ACC_NUMBER"="T"."ACC_NUMBER" AND
              "ACC_DATE">="DFU_GET_CURR_MONTH_STARTDATE"(:ACC_KEY,C
ASE  WHEN
              NVL("P"."TRAN_VALUE_DT",:V_CURRENT_DATE)<:V_CURRENT_DATE THEN "P".
"TRAN_VALUE_DT" ELSE
              :V_CURRENT_DATE END ) AND "ACC_DATE"<=:6)
       filter("ACC_DATE"<="DFU_GET_CURR_MONTH_ENDTDATE"(:ACC_KEY,"D
FU_GET_CURR_MONTH_
              STARTDATE"(:ACC_KEY,CASE  WHEN NVL("P"."TRAN_VALUE_DT",:V_CU
RRENT_DATE)<:V_CURRENT_DATE
              THEN "P"."TRAN_VALUE_DT" ELSE :V_CURRENT_DATE END )))
   5 - filter("ACC_KEY"=:1)

-------------------------------------------------------------------------------
ALTERNATIVE PLANS SECTION
-------------------------------------------------------------------------------

Plan 1
------

  Plan Origin                 :Cursor Cache
  Plan Hash Value             :2650109619
  Executions                  :1229
  Elapsed Time                :48.718 sec
  CPU Time                    :30.149 sec
  Buffer Gets                 :3196590
  Disk Reads                  :0
  Disk Writes                 :0

Notes:
  1. Statistics shown are averaged over multiple executions.

--------------------------------------------------------------------------------
-------------------------------
| Id  | Operation                       | Name                        | Rows  |
Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
-------------------------------
|   0 | SELECT STATEMENT                |                             |     1 |
   47 |  8592   (1)| 00:01:44 |
|   1 |  NESTED LOOPS                   |                             |     1 |
   47 |  8592   (1)| 00:01:44 |
|   2 |   NESTED LOOPS                  |                             |   327K|
   47 |  8592   (1)| 00:01:44 |
|*  3 |    TABLE ACCESS FULL            | ACNUM                   |     1 |
   22 |     2   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN             | AC_BAL_ENT_BRAN |   327K|
      |  1647   (1)| 00:00:20 |
|*  5 |   MAT_VIEW ACCESS BY INDEX ROWID| AC_BAL          |     1 |
   25 |  8590   (1)| 00:01:44 |
--------------------------------------------------------------------------------
-------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("DFU_GET_CURR_MONTH_STARTDATE"(:ACC_KEY,CASE  WHEN
              NVL("P"."TRAN_VALUE_DT",:V_CURRENT_DATE)<:V_CURRENT_DATE THEN "P".
"TRAN_VALUE_DT" ELSE :V_CURRENT_DATE
              END )<=:6)
   4 - access("ACC_KEY"=:1)
   5 - filter("ACC_DATE"<=:6 AND "P"."ACC_NUMBER"="T"."TRAN_INTE
RNAL_ACNUM" AND
              "ACC_DATE">="DFU_GET_CURR_MONTH_STARTDATE"(:ACC_KEY,C
ASE  WHEN
              NVL("P"."TRAN_VALUE_DT",:V_CURRENT_DATE)<:V_CURRENT_DATE THEN "P".
"TRAN_VALUE_DT" ELSE :V_CURRENT_DATE
              END ) AND "ACC_DATE"<="DFU_GET_CURR_MONTH_ENDTDATE"(:ENTITY
_NUMBER,"DFU_GET_CURR_MONTH_STARTDATE
              "(:ACC_KEY,CASE  WHEN NVL("P"."TRAN_VALUE_DT",:V_CURRENT_DAT
E)<:V_CURRENT_DATE THEN
              "P"."TRAN_VALUE_DT" ELSE :V_CURRENT_DATE END )))

-------------------------------------------------------------------------------


SQL>

Friday, September 18, 2015

Filter String only/Number Only from Set of Strings.


--- Number only from set of strings using TRANSLATE

SELECT TRANSLATE(UPPER('342fgs1dfsN'), '1ABCDEFGHIJKLMNOPQRSTUVWXYZ', '1') a FROM DUAL;

--- String only from set of strings using TRANSLATE

SELECT TRANSLATE('342fgs1dfsN', '0123456789', '1') a FROM DUAL;

--- Number only from set of strings using Regular Expressions

SELECT REGEXP_REPLACE('3NASDasdas','[a-zA-Z'']','')  FROM DUAL;

--- String only from set of strings using Regular Expressions

SELECT REGEXP_REPLACE('3NASDasd5345as','[0-9'']','')  FROM DUAL;

Thursday, August 20, 2015

Convert Multiple Column Value In Row

In hear I am trying to show how we can convert multiple (Three) column  value in single column row.

Table :

CREATE TABLE DATA1
(
  ID    NUMBER,
  COL1  NUMBER,
  COL2  NUMBER,
  COL3  NUMBER

);

INSERT INTO DATA1
   (ID, COL1, COL2, COL3)
 VALUES
   (1, 1, 1, 2);
INSERT INTO DATA1
   (ID, COL1, COL2, COL3)
 VALUES
   (2, 2, 1, 2);
INSERT INTO DATA1
   (ID, COL1, COL2, COL3)
 VALUES
   (3, 5, 2, 3);

SQL> select * from DATA1;

        ID       COL1       COL2       COL3
---------- ---------- ---------- ----------
         1          1          1          2
         2          2          1          2
         3          5          2          3

SQL>

SQL> WITH TABLE_DATA AS (SELECT * FROM DATA1),
  2       DATA
  3       AS (SELECT LEVEL UQID
  4                 FROM DUAL
  5           CONNECT BY LEVEL <= 3),
  6       T_DATA
  7       AS (SELECT UQID,
  8                    ID,
  9                    COL1,
 10                    COL2,
 11                    COL3
 12               FROM TABLE_DATA, DATA
 13           ORDER BY ID),
 14  FINAL_DATA AS(
 15  SELECT ID,
 16         (SELECT (CASE
 17                     WHEN F.UQID = 1 THEN COL1
 18                     WHEN F.UQID = 2 THEN COL2
 19                     WHEN F.UQID = 3 THEN COL3
 20                     ELSE NULL
 21                  END)
 22            FROM T_DATA F
 23           WHERE F.ID = T.ID AND F.UQID = T.UQID)
 24            ROW_VALUE
 25    FROM T_DATA T)
 26  SELECT * FROM FINAL_DATA;

        ID  ROW_VALUE
---------- ----------
         1          1
         1          1
         1          2
         2          2
         2          1
         2          2
         3          5
         3          2
         3          3

9 rows selected.

SQL>

------- This query show duplicate value in multiple column ....

SQL> WITH TABLE_DATA AS (SELECT * FROM DATA1),
  2       DATA
  3       AS (SELECT LEVEL UQID
  4                 FROM DUAL
  5           CONNECT BY LEVEL <= 3),
  6       T_DATA
  7       AS (SELECT UQID,
  8                    ID,
  9                    COL1,
 10                    COL2,
 11                    COL3
 12               FROM TABLE_DATA, DATA
 13           ORDER BY ID),
 14  FINAL_DATA AS(
 15  SELECT ID,
 16         (SELECT (CASE
 17                     WHEN F.UQID = 1 THEN COL1
 18                     WHEN F.UQID = 2 THEN COL2
 19                     WHEN F.UQID = 3 THEN COL3
                   ELSE NULL
 20   21                  END)
 22            FROM T_DATA F
 23           WHERE F.ID = T.ID AND F.UQID = T.UQID)
 24            ROW_VALUE
 25    FROM T_DATA T)
 26  SELECT ID, ROW_VALUE, COUNT(*) FROM FINAL_DATA
 27  GROUP BY ID, ROW_VALUE
 28  HAVING COUNT(*)>1;

        ID  ROW_VALUE   COUNT(*)
---------- ---------- ----------
         1          1          2
         2          2          2

SQL>

Sunday, July 26, 2015

Return data from second query if first query result is empty.

This query help you to use WHEN NO_DATA_FOUND Exception feature in SQL. Here I am used three query.

1. Return result only from first query if first query return some data.
2. Return result only from Second query if first query return no data.
3. Return result only from Third query if first and second query  return no data.

Setup :

CREATE TABLE ACC_PROD
(PROD NUMBER,
 ACC NUMBER,
 RS NUMBER);

Insert into ACC_PROD
   (PROD, ACC, RS)
 Values
   (1, 0, 1);
Insert into ACC_PROD
   (PROD, ACC, RS)
 Values
   (0, 101, 1);
Insert into ACC_PROD
   (PROD, ACC, RS)
 Values
   (0, 0, 1);
COMMIT;

Query :

WITH DATA_FIRST
     AS (SELECT *
           FROM ACC_PROD
          WHERE (PROD = 0 AND ACC = :P_ACC)),
     DATA_SECOND
     AS (SELECT *
           FROM ACC_PROD
          WHERE (PROD = :P_PROD AND ACC = 0)),
     DATA_THIRD
     AS (SELECT *
           FROM ACC_PROD
          WHERE (PROD = 0 AND ACC = 0))
SELECT * FROM DATA_FIRST
UNION ALL
SELECT *
  FROM DATA_SECOND
 WHERE NOT EXISTS (SELECT NULL FROM DATA_FIRST)
UNION ALL
SELECT *
  FROM DATA_THIRD
 WHERE     NOT EXISTS (SELECT NULL FROM DATA_FIRST)
       AND NOT EXISTS (SELECT NULL FROM DATA_SECOND)

Monday, June 15, 2015

Convert BLOB/CLOB Data to VARCHAR2

Convert BLOB Column to VARCHAR2 ...


SELECT TO_CHAR(DBMS_LOB.SUBSTR(QUERY_FILE, 4000, 1 )) QUERY_TEXT
FROM SQL_TEXT

WHERE UNIQUE_ID=:P2_UNIQUE_ID;

Convert CLOB Column to VARCHAR2 ...

SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(QUERY_FILE, 2000, 1 ) ) QUERY_TEXT
FROM SQL_TEXT

WHERE UNIQUE_ID=:P2_UNIQUE_ID;

Thursday, May 21, 2015

Finding Lock In Oracle Database using SQL Statements.

1. Find All Object Which are Currently Locked By Session.

SELECT OBJECT_NAME,S.INST_ID,S.SID,S.SERIAL#,S.OSUSER,S.SERVER,S.MACHINE, S.STATUS,P.PNAME,SQL_TEXT, SQL_FULLTEXT
FROM GV$LOCKED_OBJECT L,GV$SESSION S,GV$PROCESS P,DBA_OBJECTS O, GV$SQLAREA T
WHERE L.OBJECT_ID=O.OBJECT_ID
AND S.SQL_ADDRESS =T.ADDRESS
AND S.SQL_HASH_VALUE =T.HASH_VALUE
AND L.SESSION_ID=S.SID
AND S.PADDR=P.ADDR;

2.  Lists all DML locks and all outstanding requests for a DML lock.

SELECT * FROM DBA_DML_LOCKS;

3. Holding a lock on an object for which another session is waiting.

SELECT * FROM DBA_BLOCKERS;

4. Blocking Session Details.

SELECT BLOCKING_SESSION, SID, SERIAL#, WAIT_CLASS,SECONDS_IN_WAIT
FROM  V$SESSION
WHERE  BLOCKING_SESSION IS NOT NULL
ORDER BY BLOCKING_SESSION;

Wednesday, May 20, 2015

Find SQL Execution Plan


SQL> EXPLAIN PLAN FOR SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID=50;

Explained.

SQL> SELECT * FROM TABLE (DBMS_XPLAN.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1445457117

-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           | 18113 |  2352K|   126   (1)| 00:00:02 |
|*  1 |  TABLE ACCESS FULL| EMPLOYEES | 18113 |  2352K|   126   (1)| 00:00:02 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

   1 - filter("DEPARTMENT_ID"=50)

Note
-----
   - dynamic sampling used for this statement (level=2)

17 rows selected.

SQL>

Sunday, December 14, 2014

Day Wise Account Balance Statement (Generat Manual Data Full Month).

CREATE TABLE AC_BAL
(
  AC_NUMBER  NUMBER,
  BALANCE    NUMBER,
  TR_DATE    DATE
);

SET DEFINE OFF;
Insert into AC_BAL
   (AC_NUMBER, BALANCE, TR_DATE)
 Values
   (1, 3000, TO_DATE('12/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into AC_BAL
   (AC_NUMBER, BALANCE, TR_DATE)
 Values
   (1, 2000, TO_DATE('12/04/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into AC_BAL
   (AC_NUMBER, BALANCE, TR_DATE)
 Values
   (1, 8000, TO_DATE('12/16/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into AC_BAL
   (AC_NUMBER, BALANCE, TR_DATE)
 Values
   (1, 5000, TO_DATE('12/29/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into AC_BAL
   (AC_NUMBER, BALANCE, TR_DATE)
 Values
   (2, 5000, TO_DATE('12/29/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into AC_BAL
   (AC_NUMBER, BALANCE, TR_DATE)
 Values
   (3, 200, TO_DATE('12/16/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;
------ Query For Generate Statement ---------------

SELECT B.AC_NUMBER, NVL(BALANCE,0) BALANCE, DAYS
FROM AC_BAL A RIGHT OUTER JOIN (SELECT DISTINCT AC_NUMBER,DAYS FROM AC_BAL, (
SELECT (CASE WHEN LEVEL>1 THEN TRUNC(TO_DATE('30-DEC-2014'),'MM')+(LEVEL-1) ELSE TRUNC(TO_DATE('30-DEC-2014'),'MM')  END) DAYS
FROM   DUAL
CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(LAST_DAY('30-DEC-2014'),'DD')))
ORDER BY AC_NUMBER) B
ON (A.TR_DATE=B.DAYS AND B.AC_NUMBER=A.AC_NUMBER)
ORDER BY B.AC_NUMBER, DAYS

Wednesday, October 15, 2014

Send SMS using GSM Modem from Oracle Database

Send SMS using GSM Modem from Oracle Database

 SMSLib:

SMSLib provides a universal texting API, which can be used for sending and receiving messages via GSM modems.

Pre-requisites:

JDK 1.6 or higher
 JAVA Compiler

Configure SMSLib: You need the following files to configure SMSLib. You can find all of this file in Configuration_Files folder.

Download Files

Click the download link




1.       javax.comm.properties
2.       comm.jar
3.       RXTXcomm.jar
4.       win32com.dll
JAVA_HOME is path where jdk is installed

Step 1:- Copy comm.jar to
·         %JAVA_HOME%/lib  
[ In my case C:\Program Files\ Java\jdk1.7.0_03\lib ]
·         %JAVA_HOME%/jre/lib/ext
[ In my case C:\Program Files\ Java\jdk1.7.0_03\jre\lib\ext ]

Step 2:- Copy win32com.dll to
·         %JAVA_HOME%/bin
[In my case C:\Program Files\ Java\jdk1.7.0_03\bin ]
·         %JAVA_HOME%/jre/bin
      [ In my case C:\Program Files\ Java\jdk1.7.0_03\jre\bin ]
·         %windir%System32
             [ In my case C:\Windows\System32 ]

Step 3 : Copy javax.comm.properties to
·         %JAVA_HOME%/lib
            [ In my case C:\Program Files\ Java\jdk1.7.0_03\lib ]
·         %JAVA_HOME%/jre/lib
            [ In my case C:\Program Files\Java\jdk1.7.0_03\jre\lib ]
Step 4 : Copy RXTXcomm.jar to
·         %JAVA_HOME%/ jre/lib/ext
            [ In my case C:\Program Files\ Java\jdk1.7.0_03\lib ]

1.     Now open your NetBeans IDE

2.     You can find your modem port using CommunicationPortTest class. After finding port and bauds enter your port and bauds in SendSMS class. Please see red color line.

3.     Add the following jar files in your libraries (log4j-1.2.16.jar, ojdbc6.jar, smslib-3.5.1.jar)

4.     Create the following two class (SendSMS, DBCP)

5.     Create one table (SMS_LIST)

6.     Now insert row in SMS_LIST table and run project you can get SMS.

SendSMS Class


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package smsgetway;
import org.smslib.AGateway;
import org.smslib.AGateway.GatewayStatuses;
import org.smslib.IOutboundMessageNotification;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;
import java.sql.*;
/**
 *
 * @author rajib.pradhan
 */

public class SendSMS extends Thread {
    OutboundNotification outboundNotification;
    StringBuffer sql1;  
    SerialModemGateway gateway;
    String smsGatewayStatus = "";
    GatewayStatuses status;
    int i=0;
    public SendSMS() {
        try {
           
            outboundNotification = new OutboundNotification();
            SerialModemGateway gateway = new SerialModemGateway("modem.COM27", "COM27", 9600, "", "");
            gateway.setInbound(true);
            gateway.setOutbound(true);
            Service.getInstance().setOutboundMessageNotification(outboundNotification);
            Service.getInstance().addGateway(gateway);
            Service.getInstance().startService();
            status = gateway.getStatus();
            smsGatewayStatus = status.toString();
        } catch (Exception e) {
            System.out.println("EXCEPTION gateway.getStatus : "+gateway.getStatus());
            status = gateway.getStatus();
            smsGatewayStatus = status.toString();
            e.printStackTrace();
            System.out.println("Exception e.getMessage: " + e.getMessage());
            System.out.println("Exception cause: " + e.getCause());
        }
    }

    public void sendSMStoMobile() throws Exception {
        if (smsGatewayStatus.equals("STOPPED")) {
            return;
        }

        DBCP dbcp = DBCP.getInstance();
        Connection connection = dbcp.getConnection();
        Statement statement = connection.createStatement();
        ResultSet resultSet = null;
       
        try {
            sql1 = new StringBuffer();
            sql1.append("SELECT MOBILE_NUMBER, MESSAGE, TRANUM ");
            sql1.append("FROM SMSGATEWAY.SMS_LIST ");
            sql1.append("WHERE SEND_STATUS = 'N' ");
            resultSet = statement.executeQuery(sql1.toString());
           
            while (resultSet.next()) {
              
                String destMobileNo = resultSet.getString(1);
                System.out.println("Phone Number "+resultSet.getString(1));
                String message = resultSet.getString(2);
                String tranNumber = resultSet.getString(3);
                OutboundMessage sms = new OutboundMessage(destMobileNo, message);
                Service.getInstance().sendMessage(sms);
                //Update Table After Send Message
                String updateQuery = "UPDATE SMSGATEWAY.SMS_LIST SET SEND_STATUS = 'Y' WHERE TRANUM = " + tranNumber ;
                if(i<20)
                {
               System.out.print(tranNumber+": Y, ");
               
                }
                if(i==20){
                System.out.print(tranNumber+": Y, "+"\n");
                i=0;
                }
                statement.executeUpdate(updateQuery);
                connection.commit();
                i=i+1;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            dbcp.releaseConnection(connection);
        }
    }

    public class OutboundNotification implements IOutboundMessageNotification {

        public void process(AGateway gateway, OutboundMessage msg) {
            System.out.println(msg);
        }
    }

    public void run() {
        while (true) {
            try {
                sendSMStoMobile();
                this.sleep(1000);
            } catch (Exception e) {
            }
        }
    }

    public static void main(String[] args) throws Exception {
        SendSMS sendSMSFromDB = new SendSMS();
        sendSMSFromDB.start();
    }

    private void getModemInformation(SerialModemGateway gateway) throws Exception{
        System.out.println();
        System.out.println("Modem Information:");
       
        System.out.println("  Model: " + gateway.getModel());
        System.out.println("  Serial No: " + gateway.getSerialNo());
        System.out.println("  SIM IMSI: " + gateway.getImsi());
        System.out.println("  Signal Level: " + gateway.getSignalLevel() + " dBm");
        System.out.println("  Battery Level: " + gateway.getBatteryLevel() + "%");
        System.out.println("  Manufacturer: " + gateway.getManufacturer());
        System.out.println();
    }
}

Database Connection (DBCP) Class


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package smsgetway;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Vector;
import java.util.Stack;

/**
 *
 * @author rajib.pradhan
 */
/*
 *
 * Database Connection Information
 *
 */

public class DBCP implements Runnable {

    private static DBCP connectionPool;
    private Stack pool;
    private Vector busyConnections;
    private int MAX_CONNECTIONS = 10000;
    private int MIN_CONNECTIONS = 1;
    private long timeout;
    private String sDriver;
    private String sDBUrl;
    private String sUsername;
    private String sPassword;

    private DBCP(String sDriver,
                 String sUrl,
                 String sUserName,
                 String sPassword,
                 int sMaxConnection,
                 int sMinConnection,
                 long sTimeOut) throws SQLException {
       
        this.timeout = sTimeOut;
        this.sDriver = sDriver;
        this.sDBUrl = sUrl;
        this.sUsername = sUserName;
        this.sPassword = sPassword;
        this.MAX_CONNECTIONS = sMaxConnection;
        this.MIN_CONNECTIONS = sMinConnection;
        busyConnections = new Vector();
        pool = new Stack();
        for (int i = 0; i < MIN_CONNECTIONS; i++) {
            pool.push(makeNewConnection());
        }
    }

    public static DBCP getInstance() {
        if (connectionPool == null) {
            try {
                connectionPool =
                        new DBCP(
                        "oracle.jdbc.OracleDriver",
                       "jdbc:oracle:thin:@localhost:1521:ORCL",
                        "SMSGATEWAY",
                        "SMSGATEWAY",
                        10,
                        5,
                        30000);
            } catch (SQLException _sqlex) {
                _sqlex.printStackTrace();
            }
        }
        return connectionPool;
    }

    public synchronized Connection getConnection() throws SQLException, InterruptedException {
        Connection connection = null;
        if (connectionPool != null) {
            if (pool.size() != 0) {
                connection = (Connection) pool.pop();
                busyConnections.add(connection);
            } else {
                if (getTotalConnections() >= MAX_CONNECTIONS) {
                    while (busyConnections.size() < MAX_CONNECTIONS) {
                        connection = (Connection) pool.pop();
                        if (connection != null) {
                            connection.close();
                        }
                    }
                } else {
                    makeBackgroundConnection();
                    wait();
                    connection = getConnection();
                }
            }
        }
        return connection;
    }

    protected int getTotalConnections() {
        return pool.size() + busyConnections.size();
    }

    private void makeBackgroundConnection() throws SQLException {
        try {
            Thread connectionThread = new Thread(this);
            connectionThread.start();
        } catch (Exception _ex) {
            throw new SQLException("Max Limit of connections exceeded");
        }
    }

    private synchronized Connection makeNewConnection() throws SQLException {
        try {
            Class.forName(sDriver);
            Connection connection =
                    DriverManager.getConnection(sDBUrl, sUsername, sPassword);
            connection.setAutoCommit(false);
            return connection;
        } catch (ClassNotFoundException cnfe) {
            throw new SQLException("Can't find class for driver: " + sDriver);
        }
    }

    /**
     * run() function for making a new connection from the
     * backgroud called by makeBackgroundConnection()
     */
    public void run() {
        synchronized (this) {
            try {
                Connection con = makeNewConnection();
                pool.push(con);
                notifyAll();
            } catch (Exception _ex) {
            }
        }
    }

    /**
     *
     * @return Information about this connection pool
     */
    public synchronized void releaseConnection(Connection con) {
        pool.push(con);
        busyConnections.remove(con);
        notifyAll();
    }

    public synchronized String toString() {
        String info =
                "ConnectionPool("
                + sDBUrl
                + ","
                + sUsername
                + ")"
                + ", available="
                + pool.size()
                + ", busy="
                + busyConnections.size()
                + ", max="
                + MAX_CONNECTIONS;
        return info;
    }

    /**
     *
     * @throws SQLException
     */
    private synchronized void closeAllConnections() throws SQLException {
        while (!pool.isEmpty()) {
            try {
                ((Connection) pool.pop()).close();
            } catch (Exception _ex) {
                throw new SQLException("Unable to close the Connection");
            }
        }
        pool = new Stack();
        for (int i = 0; i < busyConnections.size(); i++) {
            try {
                ((Connection) busyConnections.get(i)).close();
                busyConnections.remove(i);
            } catch (Exception _ex) {
                throw new SQLException("Unable to close the Connection");
            }
        }
        busyConnections = new Vector();
    }

    /**
     *
     * @throws java.lang.Throwable
     */
    protected void finalize() throws java.lang.Throwable {
        try {
            closeAllConnections();
        } catch (Exception _ex) {
        }
        super.finalize();
    }
}

Port finding class (CommunicationPortTest.class)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package smsgetway;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Formatter;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import org.smslib.helper.CommPortIdentifier;
import org.smslib.helper.SerialPort;

/**
 *
 * @author rajib.pradhan
 */

public class CommunicationPortTest {

    private static final String _NO_DEVICE_FOUND = "No Device Found.";
    private final static Formatter _formatter = new Formatter(System.out);
    static CommPortIdentifier portId;
    static Enumeration<CommPortIdentifier> portList;
    static int bauds[] = {9600, 14400, 19200, 28800, 33600, 38400, 56000, 57600, 115200};

    /**
     * Wrapper around {@link CommPortIdentifier#getPortIdentifiers()} to be
     * avoid unchecked warnings.
     */
    private static Enumeration<CommPortIdentifier> getCleanPortIdentifiers() {
        return CommPortIdentifier.getPortIdentifiers();
    }

    public static void main(String[] args) {
        System.out.println("\nSearching for devices...");
        portList = getCleanPortIdentifiers();
        while (portList.hasMoreElements()) {
            portId = portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                _formatter.format("%nFound port: %-5s%n", portId.getName());
                for (int i = 0; i < bauds.length; i++) {
                    SerialPort serialPort = null;
                    _formatter.format("       Trying at %6d...", bauds[i]);
                    try {
                        InputStream inStream;
                        OutputStream outStream;
                        int c;
                        String response;
                        //serialPort = portId.open("SMSLibCommTester", 1971);
                        serialPort = portId.open("SMSAPP", 1971);
                        serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
                        serialPort.setSerialPortParams(bauds[i], SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                        inStream = serialPort.getInputStream();
                        outStream = serialPort.getOutputStream();
                        serialPort.enableReceiveTimeout(1000);
                        c = inStream.read();
                        while (c != -1) {
                            c = inStream.read();
                        }
                        outStream.write('A');
                        outStream.write('T');
                        outStream.write('\r');
                        Thread.sleep(1000);
                        response = "";
                        StringBuilder sb = new StringBuilder();
                        c = inStream.read();
                        while (c != -1) {
                            sb.append((char) c);
                            c = inStream.read();
                        }
                        response = sb.toString();
                        if (response.indexOf("OK") >= 0) {
                            try {
                                System.out.print("  Getting Info...");
                                outStream.write('A');
                                outStream.write('T');
                                outStream.write('+');
                                outStream.write('C');
                                outStream.write('G');
                                outStream.write('M');
                                outStream.write('M');
                                outStream.write('\r');
                                response = "";
                                c = inStream.read();
                                while (c != -1) {
                                    response += (char) c;
                                    c = inStream.read();
                                }
                                System.out.println(" Found: " + response.replaceAll("\\s+OK\\s+", "").replaceAll("\n", "").replaceAll("\r", ""));
//                                JOptionPane.showMessageDialog(null," Found: " + response.replaceAll("\\s+OK\\s+", "").replaceAll("\n", "").replaceAll("\r", ""), "Warning",
//                                JOptionPane.WARNING_MESSAGE);
                            } catch (Exception e) {
                                System.out.println(_NO_DEVICE_FOUND);
//                                JOptionPane.showMessageDialog(null, _NO_DEVICE_FOUND, "Warning",
//                                JOptionPane.WARNING_MESSAGE);
                            }
                        } else {
                            System.out.println(_NO_DEVICE_FOUND);
//                            JOptionPane.showMessageDialog(null, _NO_DEVICE_FOUND, "Warning",
//                                JOptionPane.WARNING_MESSAGE);
                        }
                    } catch (Exception e) {
                        System.out.print(_NO_DEVICE_FOUND);
//                        JOptionPane.showMessageDialog(null, _NO_DEVICE_FOUND, "Warning",
//                                JOptionPane.WARNING_MESSAGE);
                        Throwable cause = e;
                        while (cause.getCause() != null) {
                            cause = cause.getCause();
                        }
                        System.out.println(" (" + cause.getMessage() + ")");
                    } finally {
                        if (serialPort != null) {
                            serialPort.close();
                        }
                    }
                }
            }
        }
        System.out.println("\nCommunication Test Completed.");
//        JOptionPane.showMessageDialog(null, "Communication Test Completed.", "Information",
//                                JOptionPane.INFORMATION_MESSAGE);
    }
}

Table Scripts

CREATE TABLE SMS_LIST
(
  MOBILE_NUMBER  VARCHAR2(20 BYTE),
  MESSAGE        VARCHAR2(300 BYTE),
  SEND_STATUS    CHAR(1 BYTE)                   DEFAULT 'N',
  TRANUM         VARCHAR2(30 BYTE)
)