Inconsistent datatypes: expected NUMBER got CHAR error

Hi,
I have the following table
create GLOBAL TEMPORARY TABLE br_total_rtn_data_tmp
code varchar(50)     NOT NULL,
name                         varchar(255),     
cum_ytd_rtn_amt          varchar(255),     
cum_one_mon_rtn_amt          varchar(255)     ,
cum_thr_mon_rtn_amt          varchar(255)     ,
cum_six_mon_rtn_amt          varchar(255),
cum_nine_mon_rtn_amt     varchar(255),
cum_one_yr_rtn_amt          varchar(255),
cum_thr_yr_rtn_amt          varchar(255),
cum_five_yr_rtn_amt          varchar(255),
cum_ten_yr_rtn_amt          varchar(255),
cum_lof_rtn_amt               varchar(255),
avg_anl_one_yr_rtn_amt     varchar(255),
avg_anl_thr_yr_rtn_amt     varchar(255),
avg_anl_five_yr_rtn_amt     varchar(255),
avg_anl_ten_yr_rtn_amt     varchar(255),
avg_anl_lof_rtn_amt          varchar(255),
cum_prev_1m_month_end     varchar(255),
cum_prev_2m_month_end     varchar(255)
)ON COMMIT PRESERVE ROWS;
I have a case statement
CASE
             WHEN code = 'MDN' THEN
                       max(case when p.m_date = v_prev2_yr_mon and p.period_type = '1M' then p.mdn /100  else null end)
             WHEN code = 'QRT' THEN
                  max(case when p.m_date = v_prev2_yr_mon and p.period_type = '1M' then p.quartile  else null end)
             WHEN code = 'PCT' THEN
                  max(case when p.m_date = v_prev2_yr_mon and p.period_type = '1M' then p.pct_beaten / 100 else null end)
             WHEN code = 'RNK' THEN
                       case when (p.m_date = v_prev2_yr_mon and p.period_type = '1M'  and p.rank is  null and p.cnt is null)
                    THEN
                                   P.RANK
                    else
                                    p.rank||'/'||p.cnt
                    end           
             ELSE NULL
             END CASE The output for code = RNK should be somewhat like 3/5 which is rank/count
but i get the error "Inconsistent datatypes: expected NUMBER got CHAR error" when i put p.rank||'/'||p.cnt
How can that be solved.
ORacle version is 10g.

Taken from the documentation of the CASE expression:
"For a simple CASE expression, the expr and all comparison_expr values must either have the same datatype (CHAR, VARCHAR2, NCHAR, or NVARCHAR2, NUMBER, BINARY_FLOAT, or BINARY_DOUBLE) or must all have a numeric datatype. If all expressions have a numeric datatype, then Oracle determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype.
For both simple and searched CASE expressions, all of the return_exprs must either have the same datatype (CHAR, VARCHAR2, NCHAR, or NVARCHAR2, NUMBER, BINARY_FLOAT, or BINARY_DOUBLE) or must all have a numeric datatype. If all return expressions have a numeric datatype, then Oracle determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype."
You need to use the same data type for all your expressions. If you want to return a string, then you need to convert the remaining numbers explicitly to strings. E.g. you could try something like this:
CASE
             WHEN code = 'MDN' THEN
                       to_char(max(case when p.m_date = v_prev2_yr_mon and p.period_type = '1M' then p.mdn /100  else null end), 'TM')
             WHEN code = 'QRT' THEN
                  to_char(max(case when p.m_date = v_prev2_yr_mon and p.period_type = '1M' then p.quartile  else null end), 'TM')
             WHEN code = 'PCT' THEN
                  to_char(max(case when p.m_date = v_prev2_yr_mon and p.period_type = '1M' then p.pct_beaten / 100 else null end), 'TM')
             WHEN code = 'RNK' THEN
                       case when (p.m_date = v_prev2_yr_mon and p.period_type = '1M'  and p.rank is  null and p.cnt is null)
                    THEN
                                   to_char(P.RANK, 'TM')
                    else
                                    p.rank||'/'||p.cnt
                    end           
             ELSE NULL
             END CASE I see another potential issue, you're mixing aggregate functions with non-aggregate expressions, this can only work if these non-aggregate expressions are part of the group by clause, but you haven't posted the complete statement so I can only guess.
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle:
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/

Similar Messages

  • PL/SQL: ORA-00932: inconsistent datatypes: expected REF got CHAR

    SQL> desc o.rel_module;
    Name Null? Type
    ID NOT NULL NUMBER(6)
    TYPE NOT NULL CHAR(7)
    BUILDDATE NOT NULL NUMBER(4)
    DESIGNROOT NOT NULL NUMBER(6)
    SQL> desc rel_module
    Name Null? Type
    ID NOT NULL NUMBER(6)
    DESIGNROOT NOT NULL NUMBER(6)
    REL_COMPOSITEPARTS REL_COMPOSITEPART_TAB
    SQL> desc REL_COMPOSITEPART_TAB
    REL_COMPOSITEPART_TAB TABLE OF REL_COMPOSITEPART
    SQL> desc REL_COMPOSITEPART
    Name Null? Type
    TYPE CHAR(7)
    BUILDDATE NUMBER(4)
    SQL> create or replace procedure rel_module_p
    2 as
    3 cursor c is select ID, TYPE, BUILDDATE, DESIGNROOT from o.rel_module;
    4 begin
    5 FOR i in c
    6 LOOP
    7 INSERT into rel_module(id,REL_CompositeParts,DESIGNROOT)
    Values (i.ID,REL_CompositePart_TAB(i.type,i.builddate), i.designroot);
    8 END LOOP;
    9 END;
    10 /
    Warning: Procedure created with compilation errors.
    SQL> show err
    Errors for PROCEDURE REL_MODULE_P:
    LINE/COL ERROR
    7/1 PL/SQL: SQL Statement ignored
    7/93 PL/SQL: ORA-00932: inconsistent datatypes: expected REF got CHAR
    Can you please tell me where needs correction.

    801556 wrote:
    Can you please tell me where needs correction.Just a fix would be:
    create or replace procedure rel_module_p
    as
    cursor c is select ID, TYPE, BUILDDATE, DESIGNROOT from o.rel_module;
    begin
    FOR i in c
    LOOP
    INSERT into rel_module(id,REL_CompositeParts,DESIGNROOT)
    values (i.ID,REL_CompositePart_TAB(REL_COMPOSITEPART(i.type,i.builddate)), i.designroot);
    END LOOP;
    END;
    /However, I'd assume what you want is:
    create or replace procedure rel_module_p
    as
    cursor c is select ID,CAST(COLLECT(REL_COMPOSITEPART(TYPE,BUILDDATE)) AS REL_CompositePart_TAB) REL_COMPOSITEPARTS, DESIGNROOT
    from rel_module
    group by id,DESIGNROOT;
    begin
    FOR i in c
    LOOP
    INSERT into rel_moduleX(id,REL_CompositeParts,DESIGNROOT)
    values (i.ID,i.REL_COMPOSITEPARTS, i.designroot);
    END LOOP;
    END;
    /SY.

  • ORA-00932: inconsistent datatypes: expected NUMBER got DATE

    I have a DAC task that is failing and I am getting the message below in the logs
    ORA-00932: inconsistent datatypes: expected NUMBER got DATE
    Attached below is the SQL for the mapping concerned, I am trying to figure this out so that I can run this ETL successfully.
    Any leads would be greatly appreciated.
    READER_1_1_1> CMN_1761 Timestamp Event: [Fri Nov 15 17:00:29 2013]
    READER_1_1_1> RR_4035 SQL Error [
    ORA-00932: inconsistent datatypes: expected NUMBER got DATE
    ORA-00932: inconsistent datatypes: expected NUMBER got DATE
    Database driver error...
    Function Name : Fetch
    SQL Stmt : SELECT
    PS_ITEM_DST.BUSINESS_UNIT_GL , PS_ITEM_DST.ACCOUNT , PS_ITEM_DST.ALTACCT , PS_ITEM_DST.DEPTID , PS_ITEM_DST.OPERATING_UNIT , PS_ITEM_DST.PRODUCT , PS_ITEM_DST.FUND_CODE , PS_ITEM_DST.CLASS_FLD , PS_ITEM_DST.PROGRAM_CODE , PS_ITEM_DST.BUDGET_REF , PS_ITEM_DST.AFFILIATE , PS_ITEM_DST.AFFILIATE_INTRA1 , PS_ITEM_DST.AFFILIATE_INTRA2 , PS_ITEM_DST.CHARTFIELD1 , PS_ITEM_DST.CHARTFIELD2 , PS_ITEM_DST.CHARTFIELD3 , PS_BI_LINE.PROJECT_ID , PS_ITEM_DST.STATISTICS_CODE , PS_ITEM.CUST_ID , PS_ITEM.ADDRESS_SEQ_NUM , PS_BI_HDR.SHIP_TO_CUST_ID , PS_BI_HDR.SHIP_TO_ADDR_NUM , PS_BI_HDR.SOLD_TO_CUST_ID , PS_BI_HDR.SOLD_TO_ADDR_NUM , PS_ITEM_DST.FOREIGN_AMOUNT , PS_ITEM_DST.MONETARY_AMOUNT , PS_ITEM_DST.FOREIGN_CURRENCY , PS_ITEM_DST.CURRENCY_CD , PS_ITEM_DST.BUSINESS_UNIT , PS_ITEM_DST.ITEM , PS_ITEM_DST.ITEM_LINE , PS_ITEM_DST.ITEM_SEQ_NUM , PS_ITEM_DST.DST_SEQ_NUM , PS_ITEM_DST.JOURNAL_ID , PS_ITEM_DST.JOURNAL_DATE , PS_ITEM_DST.JOURNAL_LINE , PS_ITEM_DST.GL_DISTRIB_STATUS , PS_ITEM_DST.LEDGER_GROUP , PS_ITEM_DST.LEDGER , SALESPERSON.EMPLID , PS_ITEM_ACTIVITY.COLLECTOR , PS_ITEM_ACTIVITY.ENTRY_TYPE , PS_ITEM_ACTIVITY.ENTRY_REASON , PS_ITEM_ACTIVITY.BANK_SETID , PS_ITEM_ACTIVITY.BANK_CD , PS_ITEM_ACTIVITY.BANK_ACCT_KEY , PS_ITEM_ACTIVITY.DEPOSIT_ID , PS_ITEM_ACTIVITY.PAYMENT_SEQ_NUM , PS_ITEM_ACTIVITY.GROUP_TYPE , PS_ITEM_ACTIVITY.POST_DT , PS_ITEM_ACTIVITY.ACCOUNTING_DT , PS_ITEM.BAL_AMT , PS_ITEM.ORIG_ITEM_AMT , PS_ITEM.ITEM_STATUS , PS_ITEM.PYMNT_TERMS_CD , PS_ITEM.DUE_DT , PS_ITEM.PO_REF , PS_ITEM.PO_LINE , PS_ITEM.ASOF_DT , PS_BI_HDR.DT_INVOICED , PS_BI_HDR.INVOICE_DT , PS_GROUP_CONTROL.OPRID , PS_ITEM.BUSINESS_UNIT_OM , PSPRCSRQST.RUNDTTM , PS_JRNL_HEADER.DTTM_STAMP_SEC , PSPRCSRQST1.RUNDTTM , PS_BI_HDR.LAST_UPDATE_DTTM , PS_JRNL_HEADER.JRNL_HDR_STATUS , PS_BI_LINE.TAX_CD , PS_BI_LINE.QTY , PS_BI_LINE.LAST_UPDATE_DTTM , PS_JRNL_HEADER.UNPOST_SEQ , PS_ITEM_DST.BUSINESS_UNIT_PC , PS_ITEM_DST.ACTIVITY_ID , PS_ITEM_DST.ANALYSIS_TYPE , PS_ITEM_DST.RESOURCE_TYPE , PS_ITEM_DST.RESOURCE_CATEGORY , PS_ITEM_DST.RESOURCE_SUB_CAT , PS_BI_LINE.CONTRACT_NUM
    FROM
    PS_ITEM_DST,
    PS_ITEM_ACTIVITY,
    PS_ITEM,
    PS_BI_HDR,
    PS_BI_LINE,
    PS_GROUP_CONTROL,
    PSPRCSRQST,
    PSPRCSRQST PSPRCSRQST1,
    PS_JRNL_HEADER,
    (SELECT A.SETCNTRLVALUE, B.SUPPORT_TEAM_MBR, B.EMPLID
    FROM PS_SET_CNTRL_REC A, PS_MEMBER_PERSON B
    WHERE A.SETID = B.SETID AND A.RECNAME = 'MEMBER_PERSON') SALESPERSON
    WHERE
    PS_ITEM_DST.BUSINESS_UNIT = PS_ITEM_ACTIVITY.BUSINESS_UNIT(+) AND PS_ITEM_DST.CUST_ID = PS_ITEM_ACTIVITY.CUST_ID(+) AND PS_ITEM_DST.ITEM = PS_ITEM_ACTIVITY.ITEM(+) AND PS_ITEM_DST.ITEM_LINE = PS_ITEM_ACTIVITY.ITEM_LINE(+) AND PS_ITEM_DST.ITEM_SEQ_NUM = PS_ITEM_ACTIVITY.ITEM_SEQ_NUM(+) AND PS_ITEM_DST.BUSINESS_UNIT = PS_ITEM.BUSINESS_UNIT(+) AND PS_ITEM_DST.CUST_ID = PS_ITEM.CUST_ID(+) AND PS_ITEM_DST.ITEM = PS_ITEM.ITEM(+) AND PS_ITEM_DST.ITEM_LINE = PS_ITEM.ITEM_LINE(+) AND PS_ITEM.BUSINESS_UNIT_BI = PS_BI_HDR.BUSINESS_UNIT(+) AND PS_ITEM.ITEM = PS_BI_HDR.INVOICE(+) AND PS_ITEM_DST.BUSINESS_UNIT_GL = PS_BI_LINE.BUSINESS_UNIT(+) AND PS_ITEM_DST.ITEM = PS_BI_LINE.INVOICE(+) AND PS_ITEM_DST.ITEM_SEQ_NUM = PS_BI_LINE.LINE_SEQ_NUM(+) AND PS_ITEM_ACTIVITY.GROUP_ID = PS_GROUP_CONTROL.GROUP_ID(+) AND PS_ITEM_ACTIVITY.GROUP_BU = PS_GROUP_CONTROL.GROUP_BU(+) AND PS_ITEM_DST.PROCESS_INSTANCE = PSPRCSRQST.PRCSINSTANCE(+) AND PS_ITEM_DST.BUSINESS_UNIT_GL = PS_JRNL_HEADER.BUSINESS_UNIT(+) AND PS_ITEM_DST.JOURNAL_ID = PS_JRNL_HEADER.JOURNAL_ID(+) AND PS_ITEM_DST.JOURNAL_DATE = PS_JRNL_HEADER.JOURNAL_DATE(+) AND PS_JRNL_HEADER.UNPOST_SEQ(+) = 0 AND PS_JRNL_HEADER.PROCESS_INSTANCE = PSPRCSRQST1.PRCSINSTANCE(+) AND PS_ITEM_ACTIVITY.BUSINESS_UNIT = SALESPERSON.SETCNTRLVALUE(+) AND PS_ITEM_ACTIVITY.SALES_PERSON = SALESPERSON.SUPPORT_TEAM_MBR(+)
    AND PS_ITEM_ACTIVITY.ENTRY_TYPE <> 'CR'
    --AND PS_ITEM_DST.GL_DISTRIB_STATUS <> 'I'
    --AND PS_ITEM_DST.GL_DISTRIB_STATUS ='D'

    It might be data issue.
    You may narrow down using length of the particular column.
    ex: date column length less than 8 or 10 might be an issue

  • ORA-00932: inconsistent datatypes: expected NUMBER got BLOB

    Hello,
    My query:
    select name,mime_type,blob_content
    from htmldb_application_files
    error:ORA-00932: inconsistent datatypes: expected NUMBER got BLOB
    What's going on?
    Tom

    Hi,
    So how can I check content of 'blob_content'?
    Tom

  • ORA-00932: inconsistent datatypes: expected NUMBER got REF db.emp_person_ty

    hello,
    from the forum general questions invited me to enter this thread.
    Re: ORA-00932: inconsistent datatypes: expected NUMBER got REF db.emp_person_ty
    Can you help me?

    here's all the transactions after downloading oracle:
    -start application start database;
    -started get started with oracle database application 11g express edition;
    -selected application express menu;
    -'re logged in with the credentials defined sys + password to the installation;
    created a workspace with:
    - Username: db;
    - Application username: dbase;
    - Added password;
    - Open the workspace I went on sql workshop;
    - Then I clicked on sql commands;
    - And I put the following commands:
    - CREATE TYPE emp_person_typ AS OBJECT (
    name VARCHAR2(30),
    manager REF emp_person_typ );
    -CREATE TABLE emp_person_obj_table OF emp_person_typ;
    -INSERT INTO emp_person_obj_table VALUES (
    emp_person_typ ('John Smith', NULL));
    -SELECT *
    FROM emp_person_obj_table;
    -at this point I will get the following errors:
    ORA-00932: inconsistent datatypes: expected NUMBER got REF db.emp_person_typ
    I only do these operations I did! I did not change anything but these problems presented to me.
    I also tried on two different machines but nothing changes. help me!!!

  • ORA-00932: inconsistent datatypes: expected NUMBER got LONG

    Hi,
    I am facing problem while issuing the command:
    ORA-00932: inconsistent datatypes: expected NUMBER got LONG
    SELECT TEXT FROM USER_VIEWS WHERE TEXT LIKE '%ASCII%'
    Any help will be needful for me
    Thanks and Regards

    Please go through this
    If you try to search a LONG column, this is what will happen:
    SQL> select record_no, comments
    2 from long_demo
    3 where
    4 comments like '%LONG%';
    comments like '%LONG%'
    ERROR at line 4:
    ORA-00932: inconsistent data types
    That's right; you can't search the contents of a LONG column. Here's what happens if you try to apply a function to a LONG column.
    SQL> select record_no, substr(comments,1,5)
    2 from long_demo;
    select record_no, substr(comments,1,5)
    ERROR at line 1:
    ORA-00932: inconsistent data types
    Again, Oracle won't enable you to apply a function to a LONG column. In a sense, you can think of a LONG column as a large container into which you can store or retrieve data--;but not manipulate it.
    I have taken this content from
    http://docs.rinet.ru/Oru7na95/ch10.html
    which I refer to when I get stuck up. Hope this helps you.

  • Ora-00932 inconsistent datatypes expected udt got char

    I am getting the beloe exception while insert:
    ora-00932 inconsistent datatypes expected udt got char
    How to overcome this issue?
    Query:
    INSERT INTO syncdiffassociatedobject
                (syncdiffassociatedobjectid,
                 sdao2syncdiff,
                 sdao2dimobject,
                 sdao2object,
                 sdao2upk,
                 sdao2udmclass,
                 NAME, nestedlevel, behaviour
         VALUES (seq_sas.NEXTVAL,
                 TREAT (:b1 AS o_sync_differenceobject).sdo2syncdiff,
                 NVL (TREAT (:b2 AS o_sync_differenceobject).dimobjectid,
                      (SELECT udmclass2dimobject
                         FROM udmclass
                        WHERE udmclassid =
                                 TREAT (:b8 AS o_sync_differenceobject).udmclassid)
                 TREAT (:b3 AS o_sync_differenceobject).objectid,
                 TREAT (:b4 AS o_sync_differenceobject).upk,
                 TREAT (:b5 AS o_sync_differenceobject).udmclassid,
                 TREAT (:b6 AS o_sync_differenceobject).NAME, 0, :b7

    desc syncdiffassociatedobject;
    Column Name
    ID
    Pk
    Null?
    Data Type
    Default
    Histogram
    Encryption Alg
    Salt
    SYNCDIFFASSOCIATEDOBJECTID
    1
    1
    N
    NUMBER
    Yes
    SDAO2SYNCDIFF
    2
    N
    NUMBER
    Yes
    SDAO2DIMOBJECT
    3
    N
    NUMBER
    Yes
    SDAO2OBJECT
    4
    Y
    NUMBER
    Yes
    SDAO2UPK
    5
    Y
    VARCHAR2 (240 Char)
    Yes
    SDAO2UDMCLASS
    6
    Y
    NUMBER
    Yes
    NAME
    7
    Y
    VARCHAR2 (240 Char)
    Yes
    OBJECTCONTEXT
    8
    Y
    VARCHAR2 (2000 Char)
    Yes
    NESTEDLEVEL
    9
    N
    NUMBER
    Yes
    BEHAVIOUR
    10
    N
    NUMBER
    Yes

  • ORA-00932: inconsistent datatypes: expected NUMBER got LABEL

    Hello,
    I get this error:
    ORA-00932: inconsistent datatypes: expected NUMBER got LABEL
    During an export of a rather large database. I've seen some threads that are similar to this issue but never one relating to doing a table export to .dmp file.
    Can anyone help me understand it?

    Forgot to mention...
    9.2.0.4 Database
    9.2.0.6 Clusterware for RAC

  • ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL

    DEAR JDEV TEAM,
    I JUST TRY TO RUNNING ITERATE SAMPLE OF OTN SAMPLE.
    I RECEIVE ABOVE MENTION ERROR. HOW TO FIX IT ?
    BEST REGARDS
    BORIS

    SQL> create table test (c1 timestamp);
    Table created.
    SQL> insert into test values(systimestamp);
    1 row created.
    SQL> select trunc(86400*(sysdate-c1)/60/60) as hours from test;
    select trunc(86400*(sysdate-c1)/60/60) as hours from test
    ERROR at line 1:
    ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND
    SQL> select trunc(86400*(sysdate-cast(c1 as date))/60/60) as hours from test;
         HOURS
             0Edited by: jeneesh on Oct 20, 2008 5:27 PM
    And you can understnad the reason for the error from the below output
    SQL> select systimestamp - c1 from test;
    SYSTIMESTAMP-C1
    +000000000 00:02:35.329017

  • Database error -ora-00932: inconsistent datatypes: expected number got date

    The above error is generated on our new 11g OAS when we execute a specific workbook with a calculation with a case statement. The case statement is displayed below.
    The error does not occur on our 10g OAS. Any ideas as to the cause/solution?
    CASE WHEN Organization.Department IN ('1028','1023') THEN Organization."Specific Departments Desc" ELSE Organization."Department Desc" END
    Thanks,
    Jerre

    Pl identify exact version of Discoverer and OS versions, along with how you know this statement is generating this error. Pl see if you can enable a trace to find the cause of the error
    How To Find Oracle Discoverer Diagnostic and Tracing Guides (Doc ID 290658.1)
    http://download.oracle.com/docs/cd/E12839_01/bi.1111/b40107/logging_diagnostics.htm
    HTH
    Srini

  • ORA-00932: inconsistent datatypes: expected NUMBER got BINARY

    when run this code then get the above error why please , image column long raw data type , and can i get length from long raw data type pleaee can send me example if you can and thanks alot
    declare
    src_lob blob;
    pos integer :=214748364337;
    buf varchar2(32000);
    begin
    select image into ( src_lob) from emp where empno=7900;
    buf:=dbms_lob.getlength( src_lob);
    dbms_output.put_line(buf);
    end;

    Your question has nothing to do with XQuery and is more appropriate for the {forum:id=75} forum. You will also need to include which line is raising the error message. It would be best to post the entire error message in your thread instead of just part of it in the subject.
    Out of curiosity, why are you returning .getLength, which returns a number, into a varchar2(32000) field? Seems overkill.

  • ORA-00932: inconsistent datatypes: expected NUMBER got CURSER

    hi
    i have created a function returning cursor
    and trying to use the same for report in
    apex 4.2.3
    select hapx_details(:p5_brnach,:p5_remark) from dual
    please help
    function is ;;;
    create or replace function hapx_details
    brcode in d009022.lbrcode%type,
    lheading in varchar2)
    return sys_refcursor
    is
    x_cursor   sys_refcursor;
    vquery varchar2(1000);
    begin
       if upper(trim(lheading))='TERMDEPOSITS' THEN
       vquery:='select lbrcode,t_cust(lbrcode,prdacctid) custno,short_acno(prdacctid) acno,ACNAME(LBRCODE,PRDACCTID) NAME,t_ost_new(lbrcode,prdacctid,SYSDATE) bal from dep_mast where lbrcode=brcode';
       elsif upper(trim(lheading))='ADVANCES' THEN
       VQUERY:='SELECT LBRCODE,CUSTNO,SHORT_ACNO(LBRCODE,PRDACCTID)ACNO,NAMETITLE,LONGNAME NAME ,t_ost_new(lbrcode,prdacctid,SYSDATE) bal FROM ac_mast WHERE LBRCODE=BRCODE AND (LBRCODE,TRIM(SUBSTR(PRDACCTID,1,8))) IN (SELECT LBRCODE,TRIM(PRDCD) FROM D009021 WHERE MODULETYPE IN (13,14,30)) AND ACCTSTAT<>3';
       ELSE
       VQUERY:='SELECT LBRCODE,CUSTNO,SHORT_ACNO(LBRCODE,PRDACCTID)ACNO,NAMETITLE,LONGNAME NAME,t_ost_new(lbrcode,prdacctid,SYSDATE) bal FROM ac_mast WHERE LBRCODE=BRCODE AND (LBRCODE,TRIM(SUBSTR(PRDACCTID,1,8))) IN (SELECT LBRCODE,TRIM(PRDCD) FROM D009021 WHERE MODULETYPE IN (11,12)) AND ACCTSTAT<>3';
       END IF;
       OPEN X_CURSOR FOR
       VQUERY;
       RETURN X_CURSOR;
    END HAPX_DETAILS;

    The proper way is to define a function that returns the SQL statement (with bind variables) that Apex need to execute for the report region.
    Let's say you have a region that reports either on departments (department variable is null)or employees in a department (department variable not null).
    You have a page item call P1_DEPT that specifies the department.
    You create the following function call for the report:
    MyDynamicReport(
      depatvalue => :P1_DEPT,  -- value of apex variable
      deptvariable => 'P1_DEPT' -- name of apex variable
    The function can now determine what the SQL is and return that to the Apex engine for processing:
    create or replace function MyDynamicReport( deptValue number, deptVar varchar2 ) return varchar2 is
      sqlQuery varchar2(1000);
    begin
      if deptValue is null then
         -- no department selected, so query all departments
        sqlQuery := 'select * from dept order by dept_id';
      else
         -- department selected, so display employees in department
         -- (and use the supplied bind variable in the SQL query)
        sqlQuery := 'select * from emp where dept_id = :'||deptVar||' order by emp_id';
      end if;
      return( sqlQuery );
    end;
    When creating a ref cursor, you pass the VALUE of the variable for the ref cursor to use as a bind variable.
    With an Apex dynamic query, you need to pass the NAME of the variable for the function to use and add into the dynamic query text.
    Using a pipeline table function instead for this, is idiotic.

  • Expected number got CURSER - error

    Hi,
    I've created a second function to populate the SQL Type with the ref cursor returned from the first function.
    My first function is:
    function getCapatTransa(pprefix varchar2, ptransa number, pid_lprodso number default null) return ref_cursor is
       tmp ref_cursor;
       error varchar2(1500);
    begin
        open tmp for select osif_ni.getCapatTransa(pprefix, ptransa, pid_lprodso) from dual;
        return tmp;
        exception
          when others then
           error := substr(sqlerrm,1,1500);
             raise_application_error('-20100', 'Eroare! '||error);
    end getCapatTransa;And the second function (and also the according type is):
    create or replace type transe_type as object(cod varchar2(40))
    create or replace type t_transe_type as table of transe_type;
    create or replace function get_transe_numere(pprefix varchar2, ptransa number, pid_lprodso number default null)
        return t_transe_type is
          v_transe  t_transe_type := t_transe_type();  -- Declare a local table structure and initialize it
          v_cnt     number := 0;
          v_rc      sys_refcursor;
          v_cod     varchar2(40);
       begin
         v_rc := osapi_ni.getCapatTransa(pprefix, ptransa, pid_lprodso);
         loop
           fetch v_rc into v_cod;
           exit when v_rc%NOTFOUND;
           v_transe.extend;
           v_cnt := v_cnt + 1;
           v_transe(v_cnt) := transe_type(v_cod);
         end loop;
         close v_rc;
         return v_transe;
      end;
      /When i try to call this second function, i got the error:
    SQL>  select * from table(get_Transe_numere('0268',34334,24454354));
    select * from table(get_Transe_numere('0268',34334,24454354))
    ORA-00932: inconsistent datatypes: expected NUMBER got CURSER
    ORA-06512: at "INFO.GET_TRANSE_NUMERE", line 10
    ORA-06512: at line 1But i don't know why. Please help, tell me what's wrong, i can't understand.
    Thanks

    Hello
    From what I can see you have two functions named getCapatTransa, one in osapi_ni and the other in osif_ni, but to my mind, uless they differ by return type i.e. osif_ni.getCapatTransa does not return a cursor type, you are opening a cursor that contains a cursor - so when you fetch you are fetching a cursor.
    Note that I've changed the name of one of the functions rather than create the separate schemas.
    SQL> create or replace function getCapatTransb(pprefix varchar2, ptransa number, pid_lprodso number default null) return sys_refcursor i
      2     tmp sys_refcursor;
      3     error varchar2(1500);
      4   begin
      5      open tmp for select pprefix as prefix, ptransa as transa, pid_lprodso as lprodso from dual;
      6      return tmp;
      7      exception
      8        when others then
      9         error := substr(sqlerrm,1,1500);
    10           raise_application_error('-20100', 'Eroare! '||error);
    11  end getCapatTransb;
    12  /
    Function created.
    Elapsed: 00:00:00.10
    SQL> create or replace function getCapatTransa(pprefix varchar2, ptransa number, pid_lprodso number default null) return sys_refcursor i
      2     tmp sys_refcursor;
      3     error varchar2(1500);
      4   begin
      5      open tmp for select getCapatTransb(pprefix, ptransa, pid_lprodso) from dual;
      6      return tmp;
      7      exception
      8        when others then
      9         error := substr(sqlerrm,1,1500);
    10           raise_application_error('-20100', 'Eroare! '||error);
    11  end getCapatTransa;
    12  /
    Function created.
    Elapsed: 00:00:00.03
    SQL> create or replace type transe_type as object(cod varchar2(40))
      2  /
    Type created.
    Elapsed: 00:00:00.15
    SQL> create or replace type t_transe_type as table of transe_type
      2  /
    Type created.
    Elapsed: 00:00:00.01
    SQL> create or replace function get_transe_numere(pprefix varchar2, ptransa number, pid_lprodso number default null)
      2      return t_transe_type is
      3        v_transe  t_transe_type := t_transe_type();  -- Declare a local table structure and initialize it
      4        v_cnt     number := 0;
      5        v_rc      sys_refcursor;
      6        v_cod     varchar2(40);
      7     begin
      8       v_rc := getCapatTransa(pprefix, ptransa, pid_lprodso);
      9       loop
    10         fetch v_rc into v_cod;
    11         exit when v_rc%NOTFOUND;
    12         v_transe.extend;
    13         v_cnt := v_cnt + 1;
    14         v_transe(v_cnt) := transe_type(v_cod);
    15       end loop;
    16       close v_rc;
    17       return v_transe;
    18    end;
    19    /
    Function created.
    Elapsed: 00:00:00.03
    SQL> select * from table(get_Transe_numere('0268',34334,24454354));
    select * from table(get_Transe_numere('0268',34334,24454354))
    ERROR at line 1:
    ORA-00932: inconsistent datatypes: expected NUMBER got CURSER
    ORA-06512: at "JJACOB_APP.GET_TRANSE_NUMERE", line 10
    ORA-06512: at line 1So you would need to either change this to be
    create or replace function get_transe_numere(pprefix varchar2, ptransa number, pid_lprodso number default null)
        return t_transe_type is
          v_transe  t_transe_type := t_transe_type();  -- Declare a local table structure and initialize it
          v_cnt     number := 0;
          v_rc      sys_refcursor;
          v_cod     varchar2(40);
       begin
         v_rc := getCapatTransa(pprefix, ptransa, pid_lprodso);
         loop
           fetch v_rc into v_cod;
           exit when v_rc%NOTFOUND;
           v_transe.extend;
           v_cnt := v_cnt + 1;
           v_transe(v_cnt) := transe_type(v_cod);
         end loop;
         close v_rc;
         return v_transe;
      end;
      / Or you would need to modify the loop in the table function to deal with the nested cursor.
    HTH
    David

  • ORA-00932: inconsistent datatypes: expected UDT got NUMBER

    Hello Friends...
    i got this error while inserting record ..
    ORA-00932: inconsistent datatypes: expected UDT got NUMBER
    wht is that UDT ??
    Thanks..

    You cannot insert into your table STUDENT using the COURSE_TAB collection, since the column SUB is defined as a single object type.
    So either you have to modify your insert into two inserts as follows;
    INSERT INTO STUDENT VALUES(1,COURSE('1','ORACLE') )
    INSERT INTO STUDENT VALUES(1,COURSE('2','JAVA') )
    /or you have to modify your table structure so you can store a nested table, which will allow you to have a single insert
    something like this:
    drop table s
    drop type course_tab
    create or replace type course_type as  object (
    CNO CHAR(1),
    C_CNAME VARCHAR2(10)
    CREATE or replace  TYPE course_tab AS TABLE OF course_type;
    create table s ( c course_tab )
    nested table c store as course_list
    -- You can now have a single insert as follows:
      1* insert into s (c) values ( course_tab ( course_type('1','Java'), course_type('2','Oracle'))  )
    SQL> /
    1 row created.Be careful of using nested tables though. asktom reckons one should not use them.
    P;

  • PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got NUMBER

    Hi all,
    Wondering if you could assist? I'm exploring User Types and having a small problem. I'm getting the above error for a user type I have created which I'm calling in a function. Here's what my code looks like which I'm running the 'scott' schema for testing purposes
    SQL> CREATE OR REPLACE TYPE NBR_COLL AS TABLE OF NUMBER;
    2 /
    Type created.
    SQL> create or replace FUNCTION first_rec_only
    2 (
    3 NUM_ID IN NUMBER
    4 ) RETURN NUMBER IS
    5 v_num NBR_COLL;
    6 BEGIN
    7 select deptno into v_num from dept;
    8 RETURN v_num(v_num.FIRST);
    9 END first_rec_only;
    10 /
    Warning: Function created with compilation errors.
    SQL> show errors
    Errors for FUNCTION FIRST_REC_ONLY:
    LINE/COL ERROR
    7/4 PL/SQL: SQL Statement ignored
    7/11 PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got
    NUMBER
    SQL>
    Any clues to what I'm doing wrong? Cheers.

    The deptno column is a number, you cannot directly select a number into your type, you need to use your type's constructor.
    Something like:
    CREATE OR REPLACE FUNCTION first_rec_only (NUM_ID IN NUMBER) RETURN NUMBER IS
       v_num NBR_COLL;
    BEGIN
       SELECT nbr_coll(deptno) INTO v_num from dept;
       RETURN v_num(v_num.FIRST);
    END first_rec_only;Note that although this will compile, it will throw ORA-01422: exact fetch returns more than requested number of rows when you run it. you need to either use the input parameter as a predicate on your query against dept, use rownum = 1 in the query or use bulk BULK COLLECT INTO, depending on what exactly you want to accomplish.
    John

Maybe you are looking for

  • Can't view ALL videos on my iPod

    I've never had this problem b4, but for some reason, I cannot view ALL of the videos on my iPod? Has anyone els had this problem? Is there a way to fix it?

  • How much data does google maps use

    how much data does google maos use ?

  • Using SEARCH HELP exit in dependency of other parameters from my dynpro.

    Hello experts, how can I access the values of input fields (parameters or select-options) from my dynpro? I need to build a F4-help in dependencie of another field on the screen with help of the F4 - exit. I think this should be possible. If I do tes

  • Importing 125GB+ RAW AVI Video Files

    Can anyone report success in importing video files larger then 125GB into Premiere Pro CS4? I know for a fact that Premiere Pro CS3, when importing files of this this size would only import the first few minutes and discard the rest of the video. Is

  • Using Airport Express with Mac OS X 10.5

    Hi you all, can anybody help me. I just got my first mac (with Leopard) as well as Airport Express. somehow during the installation process my harddrive is not accepted as connectivity??? Did I do something wrong or does it have to do with Leopard an