Count vs exists

I have a requirement as below :
Would relate to the emp and the dept table of the SCOTT schema.
Suppose there is a third table dept_lookup .
create table dept_lookup
deptno number,-----deptno references dept's deptno
emp_count
insert into dept_lookup values (10,100);
insert into dept_lookup values (20,200);
*note : not all department's count exist in this table
in the join of emp and the dept table , i have to derive an extra column in which i have to check whether a particular deptno exists in the dept_lookup table .If exists populate the emp_count  is there then populate the count else populate a default count of 0 .I may not have pictured my actual scenario clearly but this is the extract . I want to use a scalar subquery for this .
something like
case when (select count(1) from dept_lookup dl where d.depno=dl.deptno)>=1
      then dl.emp_count else 0 end
or
case when (select 1 from dept_lookup dl where exists (select 1 from dept d where d.deptno=dl.deptno)=1
then dl.emp_count else 0 end
This has to be implemented in very large tables , considering the fact that indexes are built on the deptno on each of these tables . What would be the performance impact if i compare exists with count(1). Which one is better ?
Thanks
Rahul

Hi,
You shoold not make a table with calculated data in it. This should be a view. See below example:
select
from
  emp
EMPNO ENAME      JOB        MGR HIREDATE      SAL    COMM DEPTNO
7369 SMITH      CLERK     7902 17-DEC-80     800             20
7499 ALLEN      SALESMAN  7698 20-FEB-81    1600     300     30
7521 WARD       SALESMAN  7698 22-FEB-81    1250     500     30
7566 JONES      MANAGER   7839 02-APR-81    2975             20
7654 MARTIN     SALESMAN  7698 28-SEP-81    1250    1400     30
7698 BLAKE      MANAGER   7839 01-MAY-81    2850             30
7782 CLARK      MANAGER   7839 09-JUN-81    2450             10
7788 SCOTT      ANALYST   7566 19-APR-87    3000             20
7839 KING       PRESIDENT      17-NOV-81    5000             10
7844 TURNER     SALESMAN  7698 08-SEP-81    1500       0     30
7876 ADAMS      CLERK     7788 23-MAY-87    1100             20
7900 JAMES      CLERK     7698 03-DEC-81     950             30
7902 FORD       ANALYST   7566 03-DEC-81    3000             20
7934 MILLER     CLERK     7782 23-JAN-82    1300             10
select
from
  dept
DEPTNO DNAME          LOC        
    10 ACCOUNTING     NEW YORK     
    20 RESEARCH       DALLAS       
    30 SALES          CHICAGO      
    40 OPERATIONS     BOSTON      
create view dept_lookup as
select
  d.deptno
  ,count(e.empno) emp_count
from
  dept d
  left join emp e on d.deptno = e.deptno
group by
  d.deptno
select
from
  dept_lookup
DEPTNO EMP_COUNT
    10         3
    20         5
    30         6
    40         0
If you are concerned bout preformance, look into Materialized views.
Regards,
Peter

Similar Messages

  • Select count(*) where exists (takes 5 hours).

    Hello Gurus,
    I have two databases on two servers, I am counting how many rows are similiar on two tables that are identical, and the rows should be identical as well. I am running a select count(*) where exists query and it takes 5 hours to complete.
    Each table only has two million rows.
    What can I do to speed it up?

    5 hours to process 2M rows does sound a bit long :(
    I didn't see this mentioned explicitly, but I thought the idea of comparing data on 2 servers implied a database link. Tuning distributed queries can be nasty.
    Start by getting an execution plan of the query to figure out what it is doing. Compare that to the plan generated by the already suggested MINUS operator. You'll need to do MINUS twice with each query in the other's position the second time. Alternately, check the indexing on the subqueries; EXISTS tends to work best with fast indexed lookups. FTS on an EXISTS subquery is not good :(
    Think about copying the data locally to one system or the other first, maybe in a materialized view or even global temporary table.
    Finally, think about tuning the transfer. There are articles on Metalink on tuning the transfer packet sizes (SDU/TDU) which might help IF YOU ARE ON UNIX; I haven't had any luck changing these values on Windows. You can also look into setting tcp.nodelay which can affect when packets get sent (another Metalink article should cover this).

  • How to count the existing license from SAP B1

    Dear All,
    Does anyone how to count......how many licenses such as CRM or Professional have been used?
    Is it possible to use SQL to get the result?
    From Samson

    Hi Samson,
    You can check the number of available licenses in the License Administration in Business One:
    Administration -> Licence -> Licence Administration -> Components tab
    You can select each component in your license file, and see the total number of licenses along with the total number available. I'm not aware of any way to do this through SQL.
    Regards,
    Niall

  • How to count no of line present in internal table depending on condtion.

    Hi,
    I want to count no of line present in one internal table.
    For example: I have an internal table with output tax line item
    lwa_gt_alv-ty_auste_ep consider this internal table having 100 lines
    depending on the condition copany code(BUKRS), Year(GJAHR), and Document number(BELNR).
    I want to count the number of line present for above mentioned condition in internal table lwa_gt_alv-ty_auste_ep.
    Kindly help as soon as possible.
    Thanks and best regards,
    Niteesh Rai

    Hello
    So, count into exist loop/endloop:
    data: counter type i.
    loop at itab.
    * do anything here ...
      if BUKRS = " condition for bukrs here
      and GJAHR = " condition for gjahr here
      and BELNR = " condition for belnr here
        counter = counter + 1.
      endif.
    * do anything here ...
    endloop.
    write counter.
    Also you may to try other way:
    data: counter type i.
    data: itab1 like itab occurs 0.
    itab1[] = itab[].
    delete itab1 where BUKRS NE " condition for bukrs here
                   and GJAHR NE " condition for gjahr here
                   and BELNR NE " condition for belnr here
    describe table itab1 lines counter.
    write counter.

  • Why not exists and minus give different result

    HI,
    I am writing thes query by using two different operators they should give me the same output but they dont. Please can anybody explain why they give different output.
    query 1
    SQL> SELECT COUNT(*) FROM
    2 (select orig_idx
    3 from rel15_au_poi a
    4 MINUS
    5 SELECT ORIG_IDX
    6 FROM REL14_1_AU_POI_INTERM B) ;
    COUNT(*)
    244312
    query 2
    SQL> select count(*)
    2 from rel15_au_poi a
    3 where not exists
    4 (select null from rel14_1_au_poi_interm b where a.orig_idx=b.ORIG_IDX) ;
    COUNT(*)
    245341
    best Regards,

    Because you have duplicates in rel15_au_poi which are counted with exists and removed with minus.
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/queries004.htm#sthref3147
    MINUS Example
    The following statement combines results with the MINUS operator, which returns only unique rows returned by the first query but not by the second:
    SELECT product_id FROM inventories
    MINUS
    SELECT product_id FROM order_items;

  • N8 Data Counter

    Hello.
    Where I can find the n8 Data Counter, if exists?. I´ve read in many places something like this: " Data Counter: Open call log and tap on right tab to view data transfer log"... but i can´t find "the tap on the right"
    Thanks
    Solved!
    Go to Solution.

    Wap only. S60 V5 had Wifi and Wap but Symbian^3 has only wap. it is logical since you worried about data usage only via wap. you can see the data usage of individual connection by going to all communications tab it will show everything, but again i miss the filter option by selected type of communication  which was available in V5. it is missing since you have no way to select each communication as in V5 (interface logic) 

  • If statement in reqular sql statement

    Hi everyone;
    I am trying to alter some trigger if I am in a certain environment. here what I am trying to do in pseudo-code
    if ((select dbenv from environments) = 'DEV') THEN
    ALTER TRIGGER XXX disable;
    end if;
    this sql script will be run from sqlplus' comand line
    reminder I don't want to do that from package or a procedure

    this to just explain
    i think select in the IF is not allowed that way please see the examples below
    SQL> ed
    Wrote file afiedt.buf
      1  DECLARE
      2  vename VARCHAR2(10);
      3  BEGIN
      4   SELECT ename INTO vename FROM EMP WHERE ename='BLAKE';
      5   IF vename='BLAKE' THEN
      6    DBMS_OUTPUT.PUT_LINE('data found');
      7   ELSE
      8     DBMS_OUTPUT.PUT_LINE('no data found');
      9   END IF;
    10* END;
    11  /
    data found
    PL/SQL procedure successfully completed.
    SQL> ed
    Wrote file afiedt.buf
      1  DECLARE
      2  vename VARCHAR2(10);
      3  BEGIN
      4   --SELECT ename INTO vename FROM EMP WHERE ename='SMITH';
      5   IF ((SELECT ename FROM EMP WHERE ename ='SMITH')='BLAKE') THEN
      6    DBMS_OUTPUT.PUT_LINE('data found');
      7   ELSE
      8     DBMS_OUTPUT.PUT_LINE('no data found');
      9   END IF;
    10* END;
    SQL> /
    IF ((SELECT ename  FROM EMP WHERE ename ='SMITH')='BLAKE') THEN
    ERROR at line 5:
    ORA-06550: line 5, column 7:
    PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
    ( - + case mod new not null others <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> avg
    count current exists max min prior sql stddev sum variance
    execute forall merge time timestamp interval date
    <a string literal with character set specification>
    <a number> <a single-quoted SQL string> pipe
    ORA-06550: line 5, column 50:
    PLS-00103: Encountered the symbol ")" when expecting one of the following:
    . ( * @ % & - + ; / at for mod rem <an exponent (**)> and or
    group having intersect minus order start union where connect
    ||
    but this is allowed
    SQL> ed
    Wrote file afiedt.buf
      1  DECLARE
      2  vename VARCHAR2(10);
      3  BEGIN
      4   --SELECT ename INTO vename FROM EMP WHERE ename='SMITH';
      5   IF 'BLAKE'='BLAKE' THEN
      6     SELECT ename INTO vename FROM EMP WHERE ename='SMITH';
    7    DBMS_OUTPUT.PUT_LINE(vename);
      8   ELSE
      9     DBMS_OUTPUT.PUT_LINE('no data found');
    10   END IF;
    11* END;
    SQL> /
    SMITH
    PL/SQL procedure successfully completed.formated
    Message was edited by:
    devmiral

  • Unable to assign the variable value

    Hi,
    I am trying to capture the error message into a variable using statement in the Refreshing tab :
    Select '<%=odiRef.getPrevStepLog("MESSAGE")%>' from dual
    After getting the error log into variable, I am making a call to Scenario which will generate a file and email it stating the error log.
    Now the issue is when i assign this variable to the Scenario variable it throws the following error:
    com.sunopsis.tools.core.exception.SnpsSimpleMessageException: Invalid parameter
         at com.sunopsis.dwg.function.SnpsFunctionBase.getSunopsisApi(SnpsFunctionBase.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execIntegratedFunction(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
         at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.i(e.java)
         at com.sunopsis.dwg.cmd.g.y(g.java)
         at com.sunopsis.dwg.cmd.e.run(e.java)
         at java.lang.Thread.run(Unknown Source)
    If i set the variable with any default value, it successfully makes a call to the scenario and generates the file.
    Please help!
    Thanks,
    Ritika

    Hi,
    i created a variable and assigned the value to another variable in a procedure, am getting the following error, as it says in the error i don't have any ";" that is causing the problem.
    the variable name is table_nm
    inside the procedure am assigning the value to lv_table_nm :=#SESSNAME.table_nm;
    If i change the variable name tos ome constant or any other value, the package is working fine. Any ideas why am getting error assigning the variable?
    6550 : 65000 : java.sql.SQLException: ORA-06550: line 1, column 294:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    ( - + case mod new not null <an identifier>
    <a double-quoted delimited-identifier> <a bind variable>
    continue avg count current exists max min prior sql stddev
    sum variance execute forall merge time timestamp interval
    date <a string literal with character set specification>
    <a number> <a single-quoted SQL string> pipe
    <an alternatively-quoted string literal with character set specification>
    <an alternatively
    java.sql.SQLException: ORA-06550: line 1, column 294:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:

  • Statspack Problem(Please Help)

    Hi,
    I got the below error from Statspack report run. It runs after every one hour and the database version is 9.2.0.8. Please help how to resolve it.
    ERROR: Database/Instance does not exist in STATS$DATABASE_INSTANCE
    ERROR: Begin Snapshot Id specified does not exist for this database/instance
    ERROR: End Snapshot Id specified does not exist for this database/instance
    WARNING: timed_statitics setting changed between begin/end snaps: TIMINGS ARE IN
    VALID
    ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID
    ERROR: Session statistics are for different sessions: RESULTS NOT PRINTED
    begin
    ERROR at line 1:
    ORA-20100: Missing Init.ora parameter db_block_size
    ORA-06512: at "PERFSTAT.STATSPACK", line 727
    ORA-06512: at "PERFSTAT.STATSPACK", line 1126
    ORA-06512: at line 2
    STATSPACK report for
    DB Name DB Id Instance Inst Num Release Cluster Host
    :ela := ;
    ERROR at line 4:
    ORA-06550: line 4, column 17:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    ( - + case mod new not null <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> avg
    count current exists max min prior sql stddev sum variance
    execute forall merge time timestamp interval date
    <a string literal with character set specification>
    <a number> <a single-quoted SQL string> pipe
    The symbol "null" was substituted for ";" to continue.
    ORA-06550: line 6, column 16:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    ( - + case mod new not null <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> avg
    count current exists max min prior sql stddev su
    Cache Sizes (end)
    ~~~~~~~~~~~~~~~~
    Buffer Cache: M Std Block Size: K
    Shared Pool Size: M Log Buffer: K
    Load Profile
    ~~~~~~~~~~~ Per Second Per Transaction
    Redo size:
    Logical reads:
    Block changes:
    Physical reads:
    Physical writes:
    User calls:
    Parses:
    Hard parses:
    Sorts:
    Logons:
    Executes:
    Transactions:
    % Blocks changed per Read: Recursive Call %:
    Rollback per transaction %: Rows per Sort:
    Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Buffer Nowait %: Redo NoWait %:
    Buffer Hit %: In-memory Sort %:
    Library Hit %: Soft Parse %:
    Execute to Parse %: Latch Hit %:
    Parse CPU to Parse Elapsd %: % Non-Parse CPU:
    SGA Memory Summary for DB: Instance: Snaps: 23410 -23412
    SGA regions Size in Bytes
    sum
    End of Report
    UNDO Usage
    Free space in GB 29.52
    USED space in GB 75.2
    TEMP_TABLESPACE MB_TOTAL MB_USED MB_FREE
    TEMP 208162 6 208156
    WHS_CUBES_TEMP 33000 0 33000
    WHS_VIEWER_TEMP 67688 0 67688
    HP-UX eesci007 B.11.11 U 9000/800 08/18/10
    04:00:44 %usr %sys %wio %idle
    04:00:49 57 29 13 2
    04:00:54 57 24 17 2
    04:00:59 57 29 11 2
    04:01:04 54 31 13 3
    04:01:09 51 33 13 3
    Average 55 29 14 2
    procs memory page faults cpu
    r b w avm free re at pi po fr de sr in sy cs us sy id
    5 6

    user605926 wrote:
    Hi,
    I got the below error from Statspack report run. It runs after every one hour and the database version is 9.2.0.8. Please help how to resolve it.
    ERROR: Database/Instance does not exist in STATS$DATABASE_INSTANCE
    ERROR: Begin Snapshot Id specified does not exist for this database/instance
    ERROR: End Snapshot Id specified does not exist for this database/instance
    WARNING: timed_statitics setting changed between begin/end snaps: TIMINGS ARE IN
    VALID
    ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID
    ERROR: Session statistics are for different sessions: RESULTS NOT PRINTED
    begin
    ERROR at line 1:
    ORA-20100: Missing Init.ora parameter db_block_size
    ORA-06512: at "PERFSTAT.STATSPACK", line 727
    ORA-06512: at "PERFSTAT.STATSPACK", line 1126
    ORA-06512: at line 2
    You might want to take a look at the docs: http://download.oracle.com/docs/cd/B10500_01/server.920/a96533/statspac.htm#21708
    Note:
    It is not correct to specify begin and end snapshots where the begin snapshot and end snapshot were taken from different instance startups. In other words, the instance must not have been shutdown between the times that the begin and end snapshots were taken.
    At the first part of the report the database id is given. Do a select * from STATS$DATABASE_INSTANCE and verify that the DBID present matches the database/instance you are attempting to run the reprot upon. The report should be ran from the same instance in which the snapshots were taken.

  • Error while replacing IF statements with DECODE function in procedure

    Hi All,
    I have created a procedure which has nested IF statements. Now I want to replace the IF statements with DECODE functions to improve performance.
    Procedure:
    IF (var_int_sev = '0')
    THEN
    var_sev := '2';
    ELSE
    SELECT sev
    INTO var_int_sev
    FROM errorconfig
    WHERE errorcode = var_errorcode;
    var_sev := var_int_sev;
    END IF;
    I converted the above IF statement into DECODE function as mentioned below:
    var_Sev := DECODE(var_int_sev,0,2,SELECT severity FROM errorconfig WHERE errorcode=var_ErrorCode)
    But it throws below error at the select statement used inside DECODE.
    Error(58,51): PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ( - + case mod new not null others <an identifier> <a double-quoted delimited-identifier> <a bind variable> avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <an alternatively-quoted string literal with character set specification> <an alternativ
    Can someone help me in converting the IF to DECODE in the above case. Also how can we use a select statement inside decode.

    instead of trying to rewrite all your code and hoping that the performance will be better, it's a better option to investigate and find out which part of your application is slow
    read this:
    When your query takes too long ...

  • Can we use SELECT statement within IF..?

    DECLARE
    A NUMBER;
    BEGIN
    IF (SELECT '2' FROM DUAL) = 2 THEN
    A := 2;
    END IF;
    DBMS_OUTPUT.PUT_LINE(A);
    END;

    Did you tried to execute it. The error itself is an explanation
    ORA-06550: line 5, column 5:
    PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
    ( - + case mod new not null <an identifier>
    <a double-quoted delimited-identifier> <a bind variable>
    continue avg count current exists max min prior sql stddev
    sum variance execute forall merge time timestamp interval
    date <a string literal with character set specification>
    <a number> <a single-quoted SQL string> pipe
    <an alternatively-quoted string literal with character set specification>
    <an alternat
    ORA-06550: line 5, column 27:
    PLS-00103: Encountered the symbol "=" when expecting one of the following:
    ) , and orNo, we can not
    You can have expressions in IF statement but not a query. Instead, you can capture in a variable and then compare in IF
    declare
    a number;
    begin
    select 2 into a from dual;
    if a = 2 then
    dbms_output.put_line(1);
    end if;
    end;
    /

  • PLS-00103: Encountered the symbol "SELECT" when expecting one of the follow

    Can any one tell me why I an getting compile error in Trigger with the following code (see below for the error message). Error is indicated in the IF statement Select clause.
    Code:
    -- AUdit Code Begin
    -- Note: Ony for those tables having 'AUDIT' UDP
    -- Value set to 'T'
    IF (Select Count(*) From DBConfiguration
    Where ConfigurationCode = 'AUDIT' AND
    ConfigurationValue = 'T') > 0 THEN
    WHEN (:new.WORKREQUESTSTATUS <> :old.WORKREQUESTSTATUS)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTSTATUS',
    :old.WORKREQUESTSTATUS,:new.WORKREQUESTSTATUS,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTSOURCE <> :old.WORKREQUESTSOURCE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTSOURCE',
    :old.WORKREQUESTSOURCE,:new.WORKREQUESTSOURCE,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTSOURCEID <> :old.WORKREQUESTSOURCEID)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTSOURCEID',
    :old.WORKREQUESTSOURCEID,:new.WORKREQUESTSOURCEID,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTDESC <> :old.WORKREQUESTDESC)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTDESC',
    :old.WORKREQUESTDESC,:new.WORKREQUESTDESC,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTDATE <> :old.WORKREQUESTDATE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTDATE',
    CAST(:old.WORKREQUESTDATE AS varchar2(256)),CAST(:new.WORKREQUESTDATE AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.WORKREQUESTOWNER <> :old.WORKREQUESTOWNER)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTOWNER',
    :old.WORKREQUESTOWNER,:new.WORKREQUESTOWNER,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTAPPCODE <> :old.WORKREQUESTAPPCODE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTAPPCODE',
    :old.WORKREQUESTAPPCODE,:new.WORKREQUESTAPPCODE,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTAPPROVER <> :old.WORKREQUESTAPPROVER)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTAPPROVER',
    :old.WORKREQUESTAPPROVER,:new.WORKREQUESTAPPROVER,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTAPPDATE <> :old.WORKREQUESTAPPDATE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTAPPDATE',
    CAST(:old.WORKREQUESTAPPDATE AS varchar2(256)),CAST(:new.WORKREQUESTAPPDATE AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.WORKREQUESTCOMMENT <> :old.WORKREQUESTCOMMENT)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTCOMMENT',
    :old.WORKREQUESTCOMMENT,:new.WORKREQUESTCOMMENT,:new.UserId)
    End;
    WHEN (:new.CLOSEDATE <> :old.CLOSEDATE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'CLOSEDATE',
    CAST(:old.CLOSEDATE AS varchar2(256)),CAST(:new.CLOSEDATE AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.ANALYTEKEY <> :old.ANALYTEKEY)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'ANALYTEKEY',
    CAST(:old.ANALYTEKEY AS varchar2(256)),CAST(:new.ANALYTEKEY AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.SUBPURPOSEKEY <> :old.SUBPURPOSEKEY)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'SUBPURPOSEKEY',
    CAST(:old.SUBPURPOSEKEY AS varchar2(256)),CAST(:new.SUBPURPOSEKEY AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.PURPOSEKEY <> :old.PURPOSEKEY)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'PURPOSEKEY',
    CAST(:old.PURPOSEKEY AS varchar2(256)),CAST(:new.PURPOSEKEY AS varchar2(256)),:new.UserId)
    End;
    End if;
    -- Audit End
    Error:
    95/5 PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
    ( - + case mod new not null others <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> avg
    count current exists max min prior sql stddev sum variance
    execute forall merge time timestamp interval date
    <a string literal with character set specification>
    <a number> <a single-quoted SQL string> pipe
    <an alternatively-quoted string literal with character set specification>
    <an alternativ
    97/39 PLS-00103: Encountered the symbol ")" when expecting one of the following:
    * & - + ; / at for mod remainder rem <an exponent (**)> and
    or group having intersect minus order start union where
    connect || multiset

    Here is the code:
    -- AUdit Code Begin
    -- Note: Ony for those tables having 'AUDIT' UDP
    -- Value set to 'T'
    IF (Select Count(DBConfigurationValue) From DBConfiguration
    Where DBConfigurationCode = 'AUDIT' AND
    DBConfigurationValue = 'T') > 0 THEN
    WHEN (:new.WORKREQUESTSTATUS <> :old.WORKREQUESTSTATUS)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTSTATUS',
    :old.WORKREQUESTSTATUS,:new.WORKREQUESTSTATUS,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTSOURCE <> :old.WORKREQUESTSOURCE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTSOURCE',
    :old.WORKREQUESTSOURCE,:new.WORKREQUESTSOURCE,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTSOURCEID <> :old.WORKREQUESTSOURCEID)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTSOURCEID',
    :old.WORKREQUESTSOURCEID,:new.WORKREQUESTSOURCEID,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTDESC <> :old.WORKREQUESTDESC)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTDESC',
    :old.WORKREQUESTDESC,:new.WORKREQUESTDESC,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTDATE <> :old.WORKREQUESTDATE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTDATE',
    CAST(:old.WORKREQUESTDATE AS varchar2(256)),CAST(:new.WORKREQUESTDATE AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.WORKREQUESTOWNER <> :old.WORKREQUESTOWNER)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTOWNER',
    :old.WORKREQUESTOWNER,:new.WORKREQUESTOWNER,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTAPPCODE <> :old.WORKREQUESTAPPCODE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTAPPCODE',
    :old.WORKREQUESTAPPCODE,:new.WORKREQUESTAPPCODE,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTAPPROVER <> :old.WORKREQUESTAPPROVER)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTAPPROVER',
    :old.WORKREQUESTAPPROVER,:new.WORKREQUESTAPPROVER,:new.UserId)
    End;
    WHEN (:new.WORKREQUESTAPPDATE <> :old.WORKREQUESTAPPDATE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTAPPDATE',
    CAST(:old.WORKREQUESTAPPDATE AS varchar2(256)),CAST(:new.WORKREQUESTAPPDATE AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.WORKREQUESTCOMMENT <> :old.WORKREQUESTCOMMENT)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'WORKREQUESTCOMMENT',
    :old.WORKREQUESTCOMMENT,:new.WORKREQUESTCOMMENT,:new.UserId)
    End;
    WHEN (:new.CLOSEDATE <> :old.CLOSEDATE)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'CLOSEDATE',
    CAST(:old.CLOSEDATE AS varchar2(256)),CAST(:new.CLOSEDATE AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.ANALYTEKEY <> :old.ANALYTEKEY)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'ANALYTEKEY',
    CAST(:old.ANALYTEKEY AS varchar2(256)),CAST(:new.ANALYTEKEY AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.SUBPURPOSEKEY <> :old.SUBPURPOSEKEY)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'SUBPURPOSEKEY',
    CAST(:old.SUBPURPOSEKEY AS varchar2(256)),CAST(:new.SUBPURPOSEKEY AS varchar2(256)),:new.UserId)
    End;
    WHEN (:new.PURPOSEKEY <> :old.PURPOSEKEY)
    Begin
    Insert INTO ADAMChangeAudit (ADAMChangeAuditKey,AuditTable,AuditRecordKey,AuditColumnName,AuditOldValue,AuditNewValue,AuditUser)
    VALUES(ADAMChangeAuditKey.NextValue,'WORKREQUEST',:new.WORKREQUESTKEY,'PURPOSEKEY',
    CAST(:old.PURPOSEKEY AS varchar2(256)),CAST(:new.PURPOSEKEY AS varchar2(256)),:new.UserId)
    End;
    End if;

  • Using Select statement in IF condition?

    hi all,
    Can i use select statement in IF COndition in pl sql ?
    eg like- if( select 1 from ASD) then
    end if;

    There is no way to do any kind of select statement inside if conditions.
    Why don't test simple cases like this first?
    An example to show it.
    SQL> begin
      2   if exists (select 1 from dual) then
      3    dbms_output.put_line('ok');
      4   end if;
      5  end;
      6  /
    if exists (select 1 from dual) then
    ERRORE alla riga 2:
    ORA-06550: line 2, column 5:
    PLS-00204: function or pseudo-column 'EXISTS' may be used inside a SQL
    statement only
    ORA-06550: line 2, column 2:
    PL/SQL: Statement ignored
    SQL> begin
      2   if ( (select count(*) from dual) > 0 ) then
      3    dbms_output.put_line('ok');
      4   end if;
      5  end;
      6  /
    if ( (select count(*) from dual) > 0 ) then
    ERRORE alla riga 2:
    ORA-06550: line 2, column 8:
    PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
    ( - + case mod new not null others <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> avg
    count current exists max min prior sql stddev sum variance
    execute forall merge time timestamp interval date
    <a string literal with character set specification>
    <a number> <a single-quoted SQL string> pipe
    <an alternatively-quoted string literal with character set specification>
    <an alternativ
    ORA-06550: line 2, column 33:
    PLS-00103: Encountered the symbol ")" when expecting one of the following:
    . , @ ; for <an identifier>
    <a double-quoted delimited-identifier> group having intersect
    minus order partition start subpartition union where connect
    SQL> begin
      2   if ( 0 in (select count(*) from dual) ) then
      3    dbms_output.put_line('ok');
      4   end if;
      5  end;
      6  /
    if ( 0 in (select count(*) from dual) ) then
    ERRORE alla riga 2:
    ORA-06550: line 2, column 12:
    PLS-00405: subquery not allowed in this context
    ORA-06550: line 2, column 2:
    PL/SQL: Statement ignoredBye Alessandro

  • APEX Application Export/Import

    Hi,
    I have my application build in APEX on 10.2.0.4 database which now i want to migrate to 11.2. Name of schema on the back of my application is DBADMIN. What i have done is, i just exported the application from my current apex on 10.2.0.4 and tried to import on my 11.2 but it gives me following error message
    ORA-20001: GET_BLOCK Error. ORA-20001: Execution of the statement was unsuccessful. ORA-06550: line 80, column 32: PLS-00103: Encountered the symbol &amp;quot;!&amp;quot; when expecting one of the following: ( - + case mod new not null &amp;lt;an identifier&amp;gt; &amp;lt;a double-quoted delimited-identifier&amp;gt; &amp;lt;a bind variable&amp;gt; continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date &amp;lt;a string litThis is first time i am migrating my application so please help to find out what is the issue and how to resolve it. Following is the detail how i performed the operation
    Source APEX
    Workspace name = Monitoring
    User of application which loged in to this workspace and created application = SALMAN
    Application name = Monitoring
    Database schema name behind application = DBADMIN
    I exported application in UNIX and also DOS format
    Destination APEX
    Workspace name = Monitoring
    User of application which loged in to import the application = UTACADMIN
    Database schema name behind application = DBADMIN and i have already exported the schema from my source database have imported all the objects with data
    Tried importing application from UNIX as well as DOS script but same error message as above.
    Please guide me how can i successfully migrate my application from my source APEX to this new APEX
    Thanks

    Now i exported the workspace from my source APEX and imported in destination and everything is fine and now apparently everything is same but still same error during import of the application, please help to resolve.
    I tried to execute the application export script on sqlplus, but following error was returned
    EMREP.UTAC.COM.SG$APEX_030200> @d:\f100.sql
    APPLICATION 100 - Monitoring
    Set Credentials...
    Check Compatibility...
    API Last Extended:20090112
    Your Current Version:20090112
    This import is compatible with version: 20090112
    COMPATIBLE (You should be able to run this import without issues.)
    Set Application ID...
    begin
    ERROR at line 1:
    ORA-02291: integrity constraint (APEX_030200.WWV_FLOWS_FK) violated - parent
    key not found
    ORA-06512: at "APEX_030200.WWV_FLOW_API", line 555
    ORA-06512: at line 3Thanks
    Salman

  • Need help in using a case statement in expression operator

    Hi All,
    I am using OWB version 10.2.0.1.0.
    My requirement is to add a new column called call _zone_key in expression operator and map it to the target table. I need to use the below expression for populating call_zone_key values
    Expression:
    case when (INGRP1.CHARGETYPE in ('O','F') or  INGRP1.TARIFF_GROUP in ('SMSINT','MMSINT')or ( INGRP1.CALL_TYPE = '002' and   INGRP1.TARIFF_GROUP  = 'MTV'))
    then
    (select call_zone_reltn_key from call_zone_reltn where
    call_zone_cd=substr(case
      when substr( INGRP1.B_SUBNO,1,2)='00'
      then
      substr( INGRP1.B_SUBNO,3)
      else substr( INGRP1.B_SUBNO,1)
      end,1,length(call_zone_cd))and rownum=1)
    else -1
    end
    All the columns needed for using the above expression is available in INGRP1 but still I am unable to deploy the mapping using above expression. Call_zone_reltn table is also imported to the module. I am getting below error
    Error:
    Warning
    ORA-06550: line 4980, column 2:
    PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
       ( - + case mod new not null others <an identifier>
       <a double-quoted delimited-identifier> <a bind variable> avg
       count current exists max min prior sql stddev sum variance
       execute forall merge time timestamp interval date
       <a string literal with character set specification>
       <a number> <a single-quoted SQL string> pipe
       <an alternatively-quoted string literal with character set specification>
       <an alternativ
    NEW_MOD_MAP_CELL_USAGE_FCT_PRE
    Create
    Warning
    ORA-06550: line 4989, column 43:
    PLS-00103: Encountered the symbol ")" when expecting one of the following:
       * & - + ; / at for mod remainder rem <an exponent (**)> and
       or group having intersect minus order start union where
       connect || multiset
    If i replace the expression with numbers such as 1 or 2, I am able to deploy the mapping.
    Kindly help in fixing this issue.
    Thanks,
    Kabilan

    You can't use the SELECT statement inside the expression, you need to join both tables before the expression. Use a Join operator with this JOIN condition:
    CALCULATED_CALL_ZONE_CD = call_zone_reltn.call_zone_cd ( + )
    Where Calculated_call_zone_cd proceed from a previous expression:
    CALCULATED_CALL_ZONE_CD = substr(case when substr( INGRP1.B_SUBNO,1,2)='00' then substr( INGRP1.B_SUBNO,3) else substr( INGRP1.B_SUBNO,1) end,1,length(call_zone_cd))
    And after joining both tables, you can use another expression to get the rownum, then another filter operator to keep only the rownum = 1, and now you can use your expression without the SELECT, using the call_zone_cd column from the outgroup in the joiner operator (you need to include that column in the filter operator to use it).
    Regards
    ANA GH

Maybe you are looking for