Wednesday, November 19, 2014

DB: Useful Queries



 1. Query for retrieving N highest paid employees FROM each Department.                         I
   select empsal,e1.deptno
   from   emp e1
   where  :n =  (select count(distinct empsal)
                 from   emp e2
                 where  e2.empsal >= e1.empsal
                 and    e2.deptno = e1.deptno
             )
 2. Query that will display the total no. of employees, and of that total the number who were   hired in 1980, 1981, 1982, and 1983.                                                                                      II
   select to_char(join_date,'YYYY') Year,count(*)
   from   emp          
   group by to_char(join_date,'YYYY')
 3. Query for listing Deptno, ename, sal, SUM(sal in that dept).                                                     III
   select deptno
         ,empname
         ,empsal
         ,(select sum(empsal) from emp where deptno =    e1.deptno) Sum
   from   emp e1 
 4. Matrix query to display the job, the salary for that job based on department number,   and  the total salary for that job for all departments.                                                                              IV
 5. Nth Top Salary of all the employees.                                                                                           V
   select empsal,e1.deptno
   from   emp e1
   where  :n =  (select count(distinct empsal)
                 from   emp e2
                 where  e2.empsal >= e1.empsal
                )
6. Retrieving  the Nth row FROM a table.                                                                                        VI
     select * from emp
  where rownum < :n+1
  minus
  select * from emp
  where rownum < :n    
 7. Tree Query.                                                                                                                                VII
 8. Eliminate duplicates rows in a table.                                                                                      VIII
 9. Displaying EVERY Nth row in a table.                                                                                        IX
10. Top N rows FROM a table.                                                                                               X
11. COUNT/SUM RANGES of data values in a column.                                                                  XI
12. For equal size ranges it might be easier to calculate it with DECODE(TRUNC(value/range),    0, rate_0, 1, rate_1, ...).                                                                                                                     XII
13. Count different data values in a column.                                                                                XIII
14. Query to get the product of all the values of a column.                                               XIV
15. Query to display only the duplicate records in a table.                                                            XV
16. Query for getting the following output as many number of rows in the table.                        XVI
17. Function for getting the Balance Value.                                                                                 XVII
18. Function for getting the Element Value.                                                                    XVIII
19. SELECT Query for counting No of words.                                                                    XIX





20. Function to check for a leap year.                                                                                            XX
   select DECODE(mod(to_number(:Year1),4)
                ,0
                ,:Year1||' - Leap Year'
                ,:Year1||' - Not Leap Year'
              )   Leap
   from dual 
21. Query for removing all non-numeric.                                                                                      XXI
22. Query for translating a column values to INITCAP.                                                               XXII
23. Function for displaying Rupees in Words.                                                                            XXIII
24. Query for deleting alternate even rows FROM a table.                                                         XXIV
25. Query for deleting alternate odd rows FROM a table.                                                            XXV
26. Procedure for sending Email.                                                                                                XXVI
27. Alternate Query for DECODE function.                                                                               XXVII
30. Query to get the last Sunday of any month.                                                                          XXX
31. Query to get all those who have no children themselves.                                                    XXXI
32. Query to SELECT last N rows FROM a table.                                                                      XXXII
33. SELECT with variables.                                                                                                      XXXIII
34. Query to get the DB Name.                                                                                                 XXXIV
35. Getting the current default schema.                                                                                   XXXV
36. Query to get all the column names of a particular table.                                                   XXXVI
37. Spool only the query result to a file in SQLPLUS.                                                             XXXVII
38. Query for getting the current SessionID.                                                                          XXXVIII
39. Query to display rows FROM m to n.                                                                                  XXXIX
40. Query to count no. Of columns in a table.                                                                           XXXX
41. Procedure to increase the buffer length.                                                                            XXXXI
42. Inserting an & symbol in a Varchar2 column.                                                                  XXXXII
43. Create Query to restrict the user to a single row.                                                            XXXXIII
44. Query to get the first inserted record FROM a table.                                                        XXXXIV
45. Concatenate a column value with multiple rows.                                                             XXXXV
46. Query to delete all the tables at once.                                                                              XXXXVI
47. SQL Query for getting Orphan Records.                                                                         XXXXVII
48. Removing Trailing blanks in a spooled file.                                                                   XXXXVIII
49. Samples for executing Dynamic SQL Statements.                                                           XXXXIX
50. Differences between SQL and MS-Access.                                                                   XXXXX
51. Query to display all the children, sub children of a parent.                                       XXXXXI
52. Procedure to read/write data from/to a text file.                                                       XXXXXII
53. Query to display random number between any two given numbers.                        XXXXXIII
54. Time difference between two date columns.                                                              XXXXXIV



















































SELECT deptno, empno, sal
FROM emp e
WHERE
2 > ( SELECT COUNT(e1.sal)
      FROM emp e1
      WHERE e.deptno = e1.deptno AND e.sal < e1.sal )
ORDER BY 1,3 DESC;



I am looking at the following output. We need to stick to this format.

Total                1980                1981                1982                1983
-----------          ------------         ------------         -------------        -----------
14                    1                      10                    2                      1


SELECT COUNT (*),  COUNT(DECODE(TO_CHAR (hiredate, 'YYYY'),'1980', empno)) "1980",
                             COUNT (DECODE (TO_CHAR (hiredate, 'YYYY'), '1981', empno)) "1981",
                             COUNT (DECODE (TO_CHAR (hiredate, 'YYYY'), '1982', empno)) "1982",
                             COUNT (DECODE (TO_CHAR (hiredate, 'YYYY'), '1983', empno)) "1983"
FROM emp;


     
SELECT a.deptno, ename, sal, (SELECT SUM(sal) FROM emp b WHERE a.deptno = b.deptno)
FROM emp a
ORDER BY a.deptno;

OUTPUT :
=======
DEPTNO                      ENAME            SAL            SUM (SAL)
=========                  =======          ====           =========
       10                         KING                5000                   11725
       30                         BLAKE             2850                 10900
       10                         CLARK             2450                 11725
       10                         JONES             2975                 11725
       30                         MARTIN            1250                 10900
       30                         ALLEN              1600                 10900
       30                         TURNER           1500                 10900
       30                         JAMES               950                 10900
       30                         WARD              2750                 10900
       20                         SMITH              8000                 33000
       20                         SCOTT             3000                 33000
       20                         MILLER          20000                 33000



The output is as follows - we need to stick to this format :

Job                  Dept 10                                    Dept 20                        Dept 30                        Total
----------            ---------------                             -------------                    -------------                    ---------
ANALYST                                                         6000                                                                6000
CLERK               1300                                      1900                            950                              4150
MANAGER         2450                                      2975                            2850                            8275
PRESIDENT       5000                                                                                                              5000
SALESMAN                                                                                         5600                            5600


SELECT job "Job", SUM (DECODE (deptno, 10, sal)) "Dept 10",
                             SUM (DECODE (deptno, 20, sal)) "Dept 20",
                             SUM (DECODE (deptno, 30, sal)) "Dept 30",
                             SUM (sal) "Total"
FROM emp
GROUP BY job ;



SELECT DEPTNO, ENAME, SAL
FROM EMP A
WHERE
3 = (SELECT COUNT(B.SAL) FROM EMP B
WHERE A.SAL < B.SAL) ORDER BY SAL DESC;



SELECT DEPTNO, ENAME, SAL
FROM EMP 
WHERE ROWID = (SELECT ROWID FROM EMP   WHERE ROWNUM <= 5
      MINUS
      SELECT ROWID FROM EMP WHERE ROWNUM < 5)



Name                            Null?              Type
-------------------------------------------------------------------
SUB                             NOT NULL       VARCHAR2(4)
SUPER                                    VARCHAR2(4)
PRICE                                      NUMBER(6,2)



SELECT sub, super
FROM parts
CONNECT BY PRIOR sub = super
START WITH sub = 'p1';



DELETE FROM table_name A
WHERE ROWID > (  SELECT min(ROWID) FROM table_name B  WHERE A.col = B.col);



SELECT *
FROM   emp
WHERE  (ROWID,0) IN (SELECT ROWID, MOD(ROWNUM,4)
                                       FROM   emp);



SELECT ename, deptno, sal
FROM (SELECT * FROM emp ORDER BY sal DESC)
WHERE ROWNUM < 10;



        SELECT
    f2,
               COUNT(DECODE(greatest(f1,59), least(f1,100), 1, 0)) "Range 60-100",
               COUNT(DECODE(greatest(f1,30), least(f1, 59), 1, 0)) "Range 30-59",
               COUNT(DECODE(greatest(f1,29), least(f1,  0), 1, 0)) "Range 00-29"
        FROM   my_table
        GROUP BY f2;



SELECT ename "Name", sal "Salary",
              DECODE( TRUNC(sal/1000, 0), 0, 0.0,
                                          1, 0.1,
                                          2, 0.2,
                                          3, 0.3) "Tax rate"
FROM   emp;


COL NAME      DATATYPE
----------------------------------------
DNO                 NUMBER
SEX                 CHAR

SELECT dno, SUM(DECODE(sex,'M',1,0)) MALE,
             SUM(DECODE(sex,'F',1,0)) FEMALE,
             COUNT(DECODE(sex,'M',1,'F',1)) TOTAL
FROM   t1
GROUP BY dno;



SELECT EXP(SUM(LN(col1))) FROM srinu;



SELECT num
FROM satyam
GROUP BY num
HAVING COUNT(*) > 1;



*
**
***
****
*****

SELECT RPAD(DECODE(temp,temp,'*'),ROWNUM,'*')
FROM srinu1;



FUNCTION F_BALANCE_VALUE
(p_business_group_id number, p_payroll_action_id number,
p_balance_name varchar2, p_dimension_name varchar2) RETURN NUMBER
IS
l_bal number;
l_defined_bal_id number;
l_assignment_action_id number;
BEGIN
            SELECT assignment_action_id
              INTO l_assignment_action_id
              FROM
              pay_assignment_actions
                        WHERE
                        assignment_id = :p_assignment_id
                        AND payroll_action_id = p_payroll_action_id;
 
            SELECT
            defined_balance_id
            INTO
            l_defined_bal_id
            FROM
            pay_balance_types pbt,
            pay_defined_balances pdb,
            pay_balance_dimensions pbd
            WHERE
            pbt.business_group_id = p_business_group_id
            AND UPPER(pbt.balance_name) = UPPER(p_balance_name)
            AND pbt.business_group_id = pdb.business_group_id
            AND pbt.balance_type_id = pdb.balance_type_id
            AND UPPER(pbd.dimension_name) = UPPER(p_dimension_name)
            AND pdb.balance_dimension_id = pbd.balance_dimension_id;
           
    l_bal := pay_balance_pkg.get_value(l_defined_bal_id,l_assignment_action_id);
 
  RETURN (l_bal);
 
exception
             WHEN no_data_found THEN
                  RETURN 0; 
END;



FUNCTION f_element_value(
                         p_classification_name in varchar2,
                         p_element_name        in varchar2,
                         p_business_group_id   in number,
                         p_input_value_name    in varchar2,
                         p_payroll_action_id      in number,
                         p_assignment_id         in number
                         )
                          RETURN number
IS
     l_element_value   number(14,2) default 0;
     l_input_value_id  pay_input_values_f.input_value_id%type;
     l_element_type_id pay_element_types_f.element_type_id%type;
BEGIN
                        SELECT DISTINCT element_type_id
                        INTO   l_element_type_id
                        FROM   pay_element_types_f pet,
                                     pay_element_classifications pec
                        WHERE  pet.classification_id = pec.classification_id
                        AND    upper(classification_name) = upper(p_classification_name)
                        AND    upper(element_name) = upper(p_element_name)
                        AND    pet.business_group_id = p_business_group_id;

              SELECT input_value_id
                        INTO   l_input_value_id
                        FROM   pay_input_values_f
                        WHERE  upper(name) = upper(p_input_value_name)
                        AND    element_type_id = l_element_type_id;
           
            SELECT NVL(prrv.result_value,0)
            INTO   l_element_value
            FROM   pay_run_result_values prrv,
            pay_run_results prr,
                        pay_assignment_actions paa
              WHERE  prrv.run_result_id = prr.run_result_id
            AND    prr.assignment_ACTION_ID = paa.assignment_action_id
            AND    paa.assignment_id = p_assignment_id
            AND    input_value_id = l_input_value_id
              AND    paa.payroll_action_id = p_payroll_action_id;

            RETURN (l_element_value);
 
exception
             WHEN no_data_found THEN
                  RETURN 0;
END;



SELECT ename,
NVL(LENGTH(REPLACE(TRANSLATE(UPPER(RTRIM(ename)),'ABCDEFGHIJKLMNOPQRSTUVWXYZ'' ','                           @'),' ',''))+1,1) word_length
FROM emp;

Explanation :

TRANSLATE(UPPER(RTRIM(ename)),'ABCDEFGHIJKLMNOPQRSTUVWXYZ'' ','                           @') -- This will translate all the characters FROM A-Z including a single quote to a space. It will also translate a space to a @.

REPLACE(TRANSLATE(UPPER(RTRIM(ename)),'ABCDEFGHIJKLMNOPQRSTUVWXYZ'' ','                           @'),' ','') -- This will replace every space with nothing in the above result.

LENGTH(REPLACE(TRANSLATE(UPPER(RTRIM(ename)),'ABCDEFGHIJKLMNOPQRSTUVWXYZ'' ','                           @'),' ',''))+1 -- This will give u the count of @ characters in the above result.



CREATE OR REPLACE FUNCTION is_leap_year (p_date IN DATE)  RETURN VARCHAR2
 AS
 v_test DATE;
 BEGIN
             v_test := TO_DATE ('29-Feb-' || TO_CHAR (p_date,'YYYY'),'DD-Mon-YYYY');
             RETURN 'Y';
 EXCEPTION
 WHEN OTHERS THEN
             RETURN 'N';
 END is_leap_year;

SQL> SELECT hiredate, TO_CHAR (hiredate, 'Day') weekday
          FROM emp
          WHERE is_leap_year (hiredate) = 'Y';




SELECT
TRANSLATE(LOWER(ssn),'abcdefghijklmnopqrstuvwxyz- ','')
FROM DUAL;



SELECT
TRANSLATE(INITCAP(temp),
SUBSTR(temp, INSTR(temp,'''')+1,1), LOWER(SUBSTR(temp, INSTR(temp,'''')+1)))
FROM srinu1;



CREATE OR REPLACE FUNCTION to_word_i
  (amount   IN NUMBER)
  RETURN       VARCHAR2
AS
  v_length     INTEGER         := 0;
  v_num2       VARCHAR2 (50)   := NULL;
  v_amount     VARCHAR2 (50)   := TO_CHAR (TRUNC (amount));
  v_word       VARCHAR2 (4000) := NULL;
  v_word1      VARCHAR2 (4000) := NULL;
  TYPE myarray IS TABLE OF VARCHAR2 (255);
  v_str myarray := myarray (' Thousand ',
                            ' Lakh ',
                            ' Crore ');
BEGIN
    IF ((amount = 0) OR (amount IS NULL)) THEN
            v_word := 'zero';
    ELSIF (TO_CHAR (amount) LIKE '%.%') THEN
    IF (SUBSTR (amount, INSTR (amount, '.') + 1) > 0) THEN
      v_num2 := SUBSTR (amount, INSTR (amount, '.') + 1);
      IF (LENGTH (v_num2) < 2) THEN
        v_num2 := v_num2 * 10;
      END IF;
      v_word1 := ' AND ' || (TO_CHAR (TO_DATE (SUBSTR (v_num2, LENGTH (v_num2) - 1,2), 'J'),
                 'JSP' ))|| ' paise ';
                
      v_amount := SUBSTR(amount,1,INSTR (amount, '.')-1);
            v_word := TO_CHAR (TO_DATE (SUBSTR (v_amount, LENGTH (v_amount) - 2,3), 'J'), 'Jsp' ) || v_word;
      v_amount := SUBSTR (v_amount, 1, LENGTH (v_amount) - 3);
            FOR i in 1 .. v_str.COUNT
            LOOP
            EXIT WHEN (v_amount IS NULL);
            v_word := TO_CHAR (TO_DATE (SUBSTR (v_amount, LENGTH (v_amount) - 1,2), 'J'), 'Jsp' ) || v_str (i) || v_word;
            v_amount := SUBSTR (v_amount, 1, LENGTH (v_amount) - 2);
            END LOOP;
    END IF;
            ELSE
                        v_word := TO_CHAR ( TO_DATE ( TO_CHAR ( amount, '999999999') , 'J'), 'JSP');
            END IF;

  v_word := v_word || ' ' || v_word1 || ' only ';
  v_word := REPLACE (RTRIM (v_word), '  ', ' ');
  v_word := REPLACE (RTRIM (v_word), '-', ' ');
 
  RETURN INITCAP (v_word);
END to_word_i;



DELETE
FROM   srinu
WHERE  (ROWID,0) IN (SELECT ROWID, MOD(ROWNUM,2)
                                     FROM   srinu);



DELETE
FROM   srinu
WHERE  (ROWID,1) IN (SELECT ROWID, MOD(ROWNUM,2)
                                     FROM   srinu);



CREATE OR REPLACE PROCEDURE Send_Mail
IS
sender VARCHAR2(50) := 'sender@something.com';
recipient VARCHAR2(50) := 'recipient@something.com';
subject VARCHAR2(100) := 'Test Message';
message VARCHAR2(1000) := 'This is a sample mail ....';
lv_mailhost VARCHAR2(30) := 'HOTNT002';
l_mail_conn utl_smtp.connection;
lv_crlf VARCHAR2(2):= CHR( 13 ) || CHR( 10 );
BEGIN
l_mail_conn := utl_smtp.open_connection (lv_mailhost, 80);
utl_smtp.helo ( l_mail_conn, lv_mailhost);
utl_smtp.mail ( l_mail_conn, sender);
utl_smtp.rcpt ( l_mail_conn, recipient);
utl_smtp.open_data (l_mail_conn);
utl_smtp.write_data ( l_mail_conn, 'FROM: ' || sender || lv_crlf);
utl_smtp.write_data ( l_mail_conn, 'To: ' || recipient || lv_crlf);
utl_smtp.write_data ( l_mail_conn, 'Subject:' || subject || lv_crlf);
utl_smtp.write_data ( l_mail_conn,  lv_crlf || message);
utl_smtp.close_data(l_mail_conn);
utl_smtp.quit(l_mail_conn);

EXCEPTION
            WHEN OTHERS THEN
                        DBMS_OUTPUT.PUT_LINE('Error');
END;
/



SELECT case
WHEN sex = 'm' THEN 'male'
WHEN sex = 'f' THEN 'female'
ELSE 'unknown'
END
FROM mytable;



CREATE TABLE srinu(dt1 date DEFAULT SYSDATE, dt2 date,
CONSTRAINT check_dt2 CHECK ((dt2 >= dt1) AND (dt2 <= ADD_MONTHS(SYSDATE,3)));


XXIX. Query to list all the suppliers who supply all the parts supplied by supplier 'S2' :

SELECT DISTINCT a.SUPP
FROM ORDERS a
WHERE a.supp != 'S2'
AND a.parts IN
(SELECT DISTINCT PARTS FROM ORDERS WHERE supp = 'S2')
GROUP BY a.SUPP
HAVING
COUNT(DISTINCT a.PARTS) >=
(SELECT COUNT(DISTINCT PARTS) FROM ORDERS WHERE supp = 'S2');

Table : orders

SUPP                 PARTS
-------------------- -------
S1                   P1
S1                   P2
S1                   P3
S1                   P4
S1                   P5
S1                   P6
S2                   P1
S2                   P2
S3                   P2
S4                   P2
S4                   P4
S4                   P5



SELECT NEXT_DAY(LAST_DAY(TO_DATE('26-10-2001','DD-MM-YYYY')) - 7,'sunday')
FROM DUAL;



table data :
id         name   parent_id
-------------------------------
1          a          NULL - the top level entry
2          b          1 - a child of 1
3          c          1
4          d          2 - a child of 2
5          e          2
6          f           3
7          g          3
8          h          4
9          i           8
10        j           9

SELECT ID
FROM MY_TABlE
WHERE PARENT_ID IS NOT NULL
MINUS
SELECT PARENT_ID
FROM MY_TABlE;



SELECT empno FROM emp WHERE ROWID in
(SELECT ROWID FROM emp
MINUS
SELECT ROWID FROM emp WHERE ROWNUM <= (SELECT COUNT(*)-5 FROM emp));



CREATE OR REPLACE PROCEDURE disp
AS
xTableName varchar2(25):='emp';
xFieldName varchar2(25):='ename';
xValue NUMBER;
xQuery varchar2(100);
name varchar2(10) := 'CLARK';
BEGIN
xQuery := 'SELECT SAL FROM ' || xTableName || ' WHERE ' || xFieldName ||
              ' = ''' || name || '''';

DBMS_OUTPUT.PUT_LINE(xQuery);

EXECUTE IMMEDIATE xQuery INTO xValue;
DBMS_OUTPUT.PUT_LINE(xValue);
END;



SELECT name FROM v$database;



SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL;



SELECT column_name
FROM all_tab_columns
WHERE TABLE_NAME = 'ORDERS';



Place the following lines of code in a file and execute the file in SQLPLUS :

set heading off
set feedback off
set colsep '        '
set termout off
set verify off
spool c:\srini.txt
SELECT empno,ename FROM emp; /* Write your Query here */
spool off
/



SELECT SYS_CONTEXT('USERENV','SESSIONID') Session_ID FROM DUAL;



To display rows 5 to 7 :

SELECT DEPTNO, ENAME, SAL
FROM EMP
WHERE ROWID IN
                (SELECT ROWID FROM EMP
                 WHERE ROWNUM <= 7
                 MINUS
                SELECT ROWID FROM EMP
                WHERE ROWNUM < 5);

OR

SELECT ename
FROM emp
GROUP BY ROWNUM, ename
HAVING ROWNUM > 1 and ROWNUM < 3;       



SELECT COUNT(column_name)
FROM user_tab_columns
WHERE table_name = 'MYTABLE';



dbms_output.enable(4000);  /*allows the output buffer to be increased to the specified number of bytes */


DECLARE
BEGIN
dbms_output.enable(4000);
FOR i IN 1..400
LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/



Set the following to some other character. By default it is &.

set define '~'












XXXXVIII. How do you remove Trailing blanks in a spooled file :
Change the Environment Options Like this :
set trimspool on
set trimout on



Sample :1
CREATE OR REPLACE PROCEDURE CNT(P_TABLE_NAME IN VARCHAR2)
AS
SqlString VARCHAR2(200);
tot number;
BEGIN
SqlString:='SELECT COUNT(*) FROM '||  P_TABLE_NAME;
EXECUTE IMMEDIATE SqlString INTO tot;
DBMS_OUTPUT.PUT_LINE('Total No.Of Records In ' || P_TABLE_NAME || ' ARE=' || tot);
END;

Sample :2
DECLARE
            sql_stmt VARCHAR2(200);
            plsql_block VARCHAR2(500);
            emp_id NUMBER(4) := 7566;
            salary NUMBER(7,2);
            dept_id NUMBER(2) := 50;
            dept_name VARCHAR2(14) := ’PERSONNEL’;
            location VARCHAR2(13) := ’DALLAS’;
            emp_rec emp%ROWTYPE;
BEGIN
            EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';

            sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
            EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;

            sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
            EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;

            plsql_block := 'BEGIN emp_pkg.raise_salary(:id, :amt); END;';
            EXECUTE IMMEDIATE plsql_block USING 7788, 500;

            sql_stmt := 'UPDATE emp SET sal = 2000 WHERE empno = :1
            RETURNING sal INTO :2';
            EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary;

            EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num'
            USING dept_id;

            EXECUTE IMMEDIATE ’ALTER SESSION SET SQL_TRACE TRUE’;
END;

Sample 3
CREATE OR REPLACE PROCEDURE DEPARTMENTS(NO IN DEPT.DEPTNO%TYPE) AS
              v_cursor integer;
              v_dname  char(20);
              v_rows   integer;
            BEGIN
              v_cursor := DBMS_SQL.OPEN_CURSOR;
              DBMS_SQL.PARSE(v_cursor, 'select dname from dept where deptno > :x', DBMS_SQL.V7);
              DBMS_SQL.BIND_VARIABLE(v_cursor, ':x', no);
              DBMS_SQL.DEFINE_COLUMN_CHAR(v_cursor, 1, v_dname, 20);
              v_rows := DBMS_SQL.EXECUTE(v_cursor);
              LOOP
                IF DBMS_SQL.FETCH_ROWS(v_cursor) = 0 THEN
                   EXIT;
                END IF;
                DBMS_SQL.COLUMN_VALUE_CHAR(v_cursor, 1, v_dname);
                DBMS_OUTPUT.PUT_LINE('Deptartment name: '||v_dname);
              END LOOP;
              DBMS_SQL.CLOSE_CURSOR(v_cursor);
            EXCEPTION
              WHEN OTHERS THEN
                   DBMS_SQL.CLOSE_CURSOR(v_cursor);
                   raise_application_error(-20000, 'Unknown Exception Raised: '||sqlcode||' '||sqlerrm);
END;



Difference 1:
            Oracle : select name from table1 where name like 'k%';
            Access: select name from table1 where name like 'k*';
Difference 2:
            Access: SELECT  TOP 2 name FROM Table1;
            Oracle : will not work there is no such TOP key word.



SELECT organization_id,name
FROM hr_all_organization_units
WHERE organization_id in
(
SELECT ORGANIZATION_ID_CHILD FROM  PER_ORG_STRUCTURE_ELEMENTS
CONNECT BY PRIOR
ORGANIZATION_ID_CHILD = ORGANIZATION_ID_PARENT
START WITH
ORGANIZATION_ID_CHILD = (SELECT organization_id
FROM hr_all_organization_units
WHERE name =  'EBG Corporate Group'));



CREATE OR REPLACE PROCEDURE read_data
AS
c_path             varchar2(100) := '/usr/tmp';
c_file_name     varchar2(20)  := 'EKGSEP01.CSV';
v_file_id           utl_file.file_type;
v_buffer           varchar2(1022) := This is a sample text’;
BEGIN
v_file_id := UTL_FILE.FOPEN(c_path,c_file_name,'w');
UTL_FILE.PUT_LINE(v_file_id, v_buffer);
UTL_FILE.FCLOSE(v_file_id);

v_file_id := UTL_FILE.FOPEN(c_path,c_file_name,'r');
UTL_FILE.GET_LINE(v_file_id, v_buffer);
DBMS_OUTPUT.PUT_LINE(v_buffer);
UTL_FILE.FCLOSE(v_file_id);
END;
/



SELECT DBMS_RANDOM.VALUE (1,2) FROM DUAL;




SELECT
       FLOOR((date1-date2)*24*60*60)/3600)
       || ' HOURS ' ||
       FLOOR((((date1-date2)*24*60*60) -
       FLOOR(((date1-date2)*24*60*60)/3600)*3600)/60)
       || ' MINUTES ' ||
       ROUND((((date1-date2)*24*60*60) -
       FLOOR(((date1-date2)*24*60*60)/3600)*3600 -
       (FLOOR((((date1-date2)*24*60*60) -
       FLOOR(((date1-date2)*24*60*60)/3600)*3600)/60)*60)))
       || ' SECS ' time_difference
FROM   my_table;



1 comment:

  1. Hard Rock Hotel & Casino - Las Vegas - Mapyro
    Find out how to get directions, photos and 경기도 출장마사지 a map of Hard Rock Hotel & Casino in Las Vegas. Rooms. Rooms. Las Vegas. Hard Rock Hotel 상주 출장샵 & 광주 출장마사지 Casino Las 강원도 출장마사지 Vegas. 안산 출장안마 Hard Rock Hotel &

    ReplyDelete