Inconsistent datatypes problem (ORA-00932)
Hi all,
Given the following two tables , located in two different schemas :
CREATE TABLE schema1.national_desc
( ENT CHAR(18 CHAR),
COD_MAJ CHAR(1 CHAR),
SID_DESC_COD_ADD NUMBER(8,0),
ID_LANG CHAR(2 CHAR) DEFAULT 'FR',
SID_COD_ADD NUMBER(8,0),
ID_TYP_COD_ADD CHAR(1 CHAR),
COD_ADD CHAR(3 CHAR),
L_DESC NCLOB,
DAT_MAJ DATE DEFAULT SYSDATE,
DAT_MAD DATE,
LL_DESC NCLOB,
CONSTRAINT pk_national_desc PRIMARY KEY (SID_DESC_COD_ADD, ID_LANG)
CREATE TABLE schema2.european_desc
( ENT CHAR(18 CHAR),
COD_MAJ CHAR(1 CHAR),
SID_DESC_COD_ADD NUMBER(8,0),
ID_LANG CHAR(2 CHAR),
SID_COD_ADD NUMBER(8,0),
ID_TYP_COD_ADD CHAR(1 CHAR),
COD_ADD CHAR(3 CHAR),
L_DESC NCLOB,
CONSTRAINT pk_european_desc PRIMARY KEY (SID_DESC_COD_ADD, ID_LANG)
)we try this query :
SELECT
'1' origine,
sid_cod_add,
l_desc desc_cod_add,
TO_CHAR (dat_mad, 'dd/mm/yyyy') dat_mad,
TO_CHAR (dat_maj, 'dd/mm/yyyy') dat_maj
FROM
N24510
WHERE
dat_maj > '01/01/2010'
AND id_lang='FR'
UNION
SELECT
'0',
sid_cod_add,
l_desc,
NULL,
NULL
FROM
F24510
where
id_lang='FR'and Oracle complains with this error : ORA-00932.
We have tried to "cast" the L_DESC column with TO_CHAR but some column value exceeds 4000 chars.
Casting with TO_CLOB give the same first error.
Any idea ?
Stephan
Oracle 10Gr2 - 10.2.0.3.0
Linux 64bits
Hi ,
Thanks for your reply. We have finally find the problem :)
Instead of UNION, we perform an UNION ALL. With UNION Oracle had to check unicity
between rows containing NCLOB columns...
Hopefully, in our case UNION ALL does the trick !
Stephan
Similar Messages
-
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 -
ORA-00932: inconsistent datatypes: expected - got - In 11g, WORKS in 9i!
Hello,
Involved in migration of a 9i database to 11g, R2. One of our procedures works in 9i but in 11g gives us "ORA-00932: inconsistent datatypes: expected - got - "
We tracked down the error in a statement where oracle does a fetch into a sys_refcursor. The fetch happens on a dynamically constructed select statement ( built by varchar concatenation).
The select statement selects 3 fields, but the fetch into passes 2 variables to the fetch statement. This causes ORA-00932 in 11g R2, but works in 9i.
Below is a modified procedure we built to demonstrate the problem. if you compile and test, you will see that the procedure runs in 9i but not 11g.
create or replace procedure testORA00932 is
v_now date;
v_fsqltext varchar2(2000);
v_curs sys_refcursor;
begin
v_fsqltext := 'select sysdate, sysdate+1 from dual'; -- select 2 fields
open v_curs for v_fsqltext;
loop
fetch v_curs into v_now; -- fetch 1 field, this statement fails in 11g (ORA-00932), works in 9i
dbms_output.put_line(v_now);
exit when v_curs%notfound;
end loop;
close v_curs;
end;
Is there a compatibility flag we can turn on to resove this problem?
Edited by: chrisl08 on Mar 29, 2012 11:11 PMAfter researching this a little more, this is a know bug to oracle: Bug 4381035
According to Oracle, the only available workaround is to provide the same number of define variables as columns in the SELECT statement. -
ORA-00932: inconsistent datatypes: expected - got -
Hi,
I have writen PL/SQL packages for data loging through pipe lined function for better peformance.The below packages has been compiled sucessfully but during the run time it shows an error
like "ORA-00932: inconsistent datatypes: expected - got -".
CREATE OR REPLACE PACKAGE pkg_mkt_hub_load
AS
PROCEDURE sp_final_load_mkt_hub;
FUNCTION fnc_pipe_tot_lvl_idx_mon_hub
(pi_input_cur IN SYS_REFCURSOR)
RETURN tot_lvl_idx_mon_tt
PIPELINED;
END pkg_mkt_hub_load;
CREATE OR REPLACE PACKAGE BODY pkg_mkt_hub_load
AS
c_default_limit CONSTANT PLS_INTEGER:=5000;
c_created_dt CONSTANT DATE:=SYSDATE;
c_created_user CONSTANT VARCHAR2(20):='SYSTEM';
c_updated_dt CONSTANT DATE:=SYSDATE;
c_updated_user CONSTANT VARCHAR2(20):='SYSTEM';
-- to get the debug desc for updating process log table
vg_debug_log_desc mkt_process_log.debug_log_desc%TYPE;
--to get process log key
vg_process_log_ky mkt_process_log.process_log_ky%TYPE;
-- reset the all variables.
PROCEDURE sp_reset_global_variables;
PROCEDURE sp_final_lvl_idx_mon_hub;
--PROCEDURE sp_final_lvl_idx_dly_hub;
FUNCTION fnc_pipe_tot_lvl_idx_mon_hub
(pi_input_cur IN SYS_REFCURSOR)
RETURN tot_lvl_idx_mon_tt
PIPELINED
AS
vl_lvl_idx_mon_cur_data tot_lvl_idx_mon_tt;
BEGIN
LOOP
FETCH pi_input_cur BULK COLLECT INTO vl_lvl_idx_mon_cur_data LIMIT c_default_limit;
EXIT WHEN vl_lvl_idx_mon_cur_data.COUNT = 0;
FOR i IN 1 .. vl_lvl_idx_mon_cur_data.COUNT
LOOP
PIPE ROW (tot_lvl_idx_mon_ot(vl_lvl_idx_mon_cur_data(i).SSIA_INDEX_ID,
vl_lvl_idx_mon_cur_data(i).start_date,vl_lvl_idx_mon_cur_data(i).currency,
vl_lvl_idx_mon_cur_data(i).level1,vl_lvl_idx_mon_cur_data(i).type,
vl_lvl_idx_mon_cur_data(i).RETURN_MONTH,vl_lvl_idx_mon_cur_data(i).RETURN_3MONTHS,
vl_lvl_idx_mon_cur_data(i).RETURN_6MONTHS,vl_lvl_idx_mon_cur_data(i).RETURN_YTD,
vl_lvl_idx_mon_cur_data(i).RETURN_1YEAR,vl_lvl_idx_mon_cur_data(i).RETURN_3YEARS,
vl_lvl_idx_mon_cur_data(i).RETURN_5YEARS,vl_lvl_idx_mon_cur_data(i).RETURN_10YEARS,
vl_lvl_idx_mon_cur_data(i).MARKET_CAP));
END LOOP;
END LOOP;
CLOSE pi_input_cur;
RETURN;
END fnc_pipe_tot_lvl_idx_mon_hub;
PROCEDURE sp_final_lvl_idx_mon_hub
AS
BEGIN
MERGE INTO mkt_total_lvl_indx_mon_hub idxhub
USING TABLE(pkg_mkt_hub_load.fnc_pipe_tot_lvl_idx_mon_hub(CURSOR(SELECT idxmap.ssia_index_code,idxstg.start_date,idxstg.currency,idxstg.level1,idxstg.type,
idxstg.return_month,idxstg.return_3months, idxstg.return_6months, idxstg.return_ytd, idxstg.return_1year,
idxstg.return_3years, idxstg.return_5years,idxstg.return_10years,idxstg.market_cap
FROM mkt_total_lvl_indx_mon_stg idxstg,
md_vendor_index_map idxmap
WHERE idxmap.source = idxstg.source
AND idxmap.base_currency = idxstg.currency
AND idxmap.return_type = idxstg.TYPE
AND idxmap.mkt_index_id = idxstg.vendor_code
AND idxmap.monthly = 'Y'
AND idxmap.file_type = 'T'))) idxmonstg
ON (idxhub.ssia_index_id=idxmonstg.ssia_index_id)
WHEN MATCHED THEN
UPDATE set effective_date=idxmonstg.start_date,
CURRENCY=idxmonstg.currency,
INDEX_LEVEL=idxmonstg.LEVEL1,
TYPE=idxmonstg.type,
return_month=idxmonstg.return_month,
return_3months=idxmonstg.return_3months,
return_6months=idxmonstg.return_6months,
return_ytd=idxmonstg.return_ytd,
return_1year=idxmonstg.return_1year,
return_3years=idxmonstg.return_3years,
return_5years=idxmonstg.return_5years,
return_10years=idxmonstg.return_10years,
market_cap=idxmonstg.market_cap,
updated_dt=SYSDATE,
updated_user='MICHAEL'
WHEN NOT MATCHED THEN
INSERT ( ssia_index_id,
effective_date,
currency,
INDEX_LEVEL,
TYPE,
return_month,
return_3months,
return_6months,
return_ytd,
return_1year,
return_3years,
return_5years,
return_10years,
market_cap,
created_dt,
created_user)
VALUES( idxmonstg.ssia_index_id,
idxmonstg.start_date,
idxmonstg.currency,
idxmonstg.LEVEL1,
idxmonstg.type,
idxmonstg.return_month,
idxmonstg.return_3months,
idxmonstg.return_6months,
idxmonstg.return_ytd,
idxmonstg.return_1year,
idxmonstg.return_3years,
idxmonstg.return_5years,
idxmonstg.return_10years,
idxmonstg.market_cap,
SYSDATE,
'MICHAEL');
END sp_final_lvl_idx_mon_hub;
PROCEDURE sp_final_load_mkt_hub
as
BEGIN
sp_final_lvl_idx_mon_hub;
END sp_final_load_mkt_hub;
PROCEDURE Sp_reset_global_variables
AS
BEGIN
vg_debug_log_desc := NULL;
END sp_reset_global_variables;
END pkg_mkt_hub_load;
SHOW ERRORS Error:
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got -
ORA-06512: at "GPAIHMKTDTA.PKG_MKT_HUB_LOAD", line 33
ORA-06512: at "GPAIHMKTDTA.PKG_MKT_HUB_LOAD", line 55
ORA-06512: at "GPAIHMKTDTA.PKG_MKT_HUB_LOAD", line 92
ORA-06512: at line 1
types scripts:
create or replace type tot_lvl_idx_mon_ot as object
(SSIA_INDEX_ID VARCHAR2(60),
start_date date,
CURRENCY VARCHAR2(10),
LEVEL1 NUMBER(31,11),
TYPE VARCHAR2(31) ,
RETURN_MONTH NUMBER(31,11),
RETURN_3MONTHS NUMBER(31,11),
RETURN_6MONTHS NUMBER(31,11),
RETURN_YTD NUMBER(31,11),
RETURN_1YEAR NUMBER(31,11),
RETURN_3YEARS NUMBER(31,11),
RETURN_5YEARS NUMBER(31,11),
RETURN_10YEARS NUMBER(31,11),
MARKET_CAP NUMBER(31,11));
create or replace type tot_lvl_idx_mon_tt is table of tot_lvl_idx_mon_ot;how to resolve this issue?>
could you please pointed out whether ref cursor used method correct or not?
>
The use looks correct but without your tables and DDL we can't even try to reproduce the problem.
Notice how you had to break down the process to find out the query that is causing the problem?
select *
from TABLE(pkg_mkt_hub_load.fnc_pipe_tot_lvl_idx_mon_hub(CURSOR(SELECT . . .Unfortunately, this is where you should have started when you began creating the process.
You are trying to design, implement and debug a process using code that has 3,4, 5 or more layers and objects and tables that have a dozen or more columns.
That is not the way I would recommend especially if you do not have experience with some of the pieces like object types and tables, pipelined functions and ref cursors. You are trying to deal with too many complications at the same time.
Here is how I would approach this if I were you.
1. Get the process to work first and then build on it. Start by copying and hacking up what you already have.
2. Create a very simple version of each of the pieces
3. Create an object type like 'tot_lvl_idx_mon_ot' with only one or two columns.
4. Create an object type like 'tot_lvl_idx_mon_tt' as a table of that simple object type
5. Create a pipelined function that uses the two new simple types, simply hard-codes a value for one or two rows and then pipes out the rows.
6. Use a simple query like the last one you posted to query the simple pipelined function
select *
from TABLE(pkg_mkt_hub_load.simpe_pipeline_function(CURSOR(SELECT . . .Work on that simple set of objects until you have the process defined and working.
Then expand the now working example to use get the data values dynamically and to use more complicated objects.
Start with something simple that works. Then build on it.
It will take a lot less time and will point out other issues with your approach to this. Also, if you try a simple version using the SCOTT emp or dept table and it doesn't work you can post the code and we can try to reproduce it and help find the problem. -
ORA-00932: inconsistent datatypes: expected - got CURSER
Hi all,
I created a Function and tried to execute it from SQL Plus, but am getting an error
ORA-00932: inconsistent datatypes: expected - got CURSER
I have been trying to debug for ages, but cant get to the root of what the problem might be. I would appreciate any help or idea's people could offer
The only comfort I take from this is that Oracle have a typo in one of their error messages :)
SQL PLUS CODE
select * FROM TABLE(CAST(tsoraimpdb.QueryAuthorsFunc(116, 1, -1, 1, 0) as tsoraimpdb.ENTITYIDTABLE));FUNCTION CODE
CREATE OR REPLACE FUNCTION &HKImpDB_Schema_Name..QueryAuthorsFunc
aKGID NUMBER,
aPageNumber NUMBER, -- The page interested
aPageSize NUMBER, -- Number of records per page
aOffset NUMBER, -- The offset = number of records already got
aTotalRecord NUMBER -- Total number of users in the database
RETURN sys_refcursor
as
l_FuncCur sys_refcursor;
l_TotalRecord NUMBER(10) := aTotalRecord;
l_Offset NUMBER(10) := aOffset;
l_PagingTable TEMP_T_TABLE:= TEMP_T_TABLE();
-- paging set up
l_MinRecordsOnAPge NUMBER(10); --last record on the previous page
l_MaxRecordsOnAPge NUMBER(10); --last record on the current page
begin
DBMS_OUTPUT.PUT_LINE('start');
select KnowdePos(rownum,p.ID) bulk collect into l_PagingTable
FROM KnowledgeGene kg
INNER JOIN HKResource r ON kg.KGOwner = r.ID
INNER JOIN Person p ON r.PersonID = p.ID
WHERE kg.kgid = akgid
ORDER BY p.FirstName + ' ' + p.LastName;
l_TotalRecord := l_PagingTable.count; -- get total records
DBMS_OUTPUT.PUT_LINE( l_TotalRecord);
if aPageSize > 0 then
if aPageNumber <= 0 then
Raise_application_error(-20003,'Invalid Page Number');
else
l_MinRecordsOnAPge := (aPageNumber-1)*aPageSize;
l_MaxRecordsOnAPge := aPageNumber*aPageSize;
end if;
else -- if @PageSize < 0 return all records
l_Offset := 0;
l_MinRecordsOnAPge := 0;
l_MaxRecordsOnAPge := l_TotalRecord;
END if;
-- return results for the correct page
open l_FuncCur for
SELECT pos
from HKResource r
INNER JOIN Person p ON r.PersonID = p.ID
inner join TABLE(CAST(l_PagingTable AS TEMP_T_TABLE)) on pos = p.id
WHERE KnowdeID > l_MinRecordsOnAPge - l_Offset AND KnowdeID <= l_MaxRecordsOnAPge - l_Offset;
return l_FuncCur;
EXCEPTION when NO_DATA_FOUND then null;
end;Ok, I think you could rewrite that as:
CREATE OR REPLACE PROCEDURE &HKImpDB_Schema_Name..QueryInterestedUsers
akgid int,
aPageSize int, -- Number of records per page
aPageNumber int, -- The page interested
aOffset int, -- The offset = number of records already got
aExcludeCategoryUser int,-- default(1), -- whether to exclude category users
aTotalRecord out NUMBER, -- Total number of users in the database
aCur out sys_refcursor
AS
-- paging set up
l_MinRecordsOnAPge NUMBER(10); --last record on the previous page
l_MaxRecordsOnAPge NUMBER(10); --last record on the current page
l_TopLevelTopicGroup NUMBER(10);
BEGIN
if aPageSize <= 0 or aPageNumber <= 0 then
Raise_application_error(-20003,'Invalid Page Size or Page Number');
else
l_MinRecordsOnAPge := (aPageNumber-1)*aPageSize;
l_MaxRecordsOnAPge := aPageNumber*aPageSize;
end if;
l_TopLevelTopicGroup := --currently not defined anywhere??!!?!
open aCur for
WITH excluded_users as (--exclude default user
SELECT ID as PersonID
FROM Person
where Username = 'default'
UNION ALL
-- exclude authors
SELECT p.ID as PersonID
FROM KnowledgeGene kg
INNER JOIN HKResource r ON kg.KGOwner = r.ID
INNER JOIN Person p ON r.PersonID = p.ID
WHERE kg.kgid = akgid
UNION ALL
-- exclude categories users if applicable
SELECT ua.PersonID
FROM HKGroup g
INNER JOIN UserAccount ua ON g.AccountID = ua.AccountID
WHERE g.ParentID = l_TopLevelTopicGroup
and aExcludeCategoryUser = 1),
PagingList as (SELECT rownum as ID,
p.ID AS PersonID,
P.Firstname||' '||P.LastName AS UserText,
p.AvatarFilename
FROM PanelKG
INNER JOIN Panel ON PanelKG.PanelID = Panel.PanelID -- MyHyperknowledge panels that contain this KG
INNER JOIN HKResource ON Panel.ResourceID = HKResource.ID -- the people who own the panels
INNER JOIN Person P ON HKResource.PersonID = P.ID
INNER JOIN PanelType pt ON pt.id = panel.panelid
INNER JOIN ProfileVisibility pv ON pv.PersonID = P.ID -- check visibility
INNER JOIN section sn ON sn.id = pv.SectionID
WHERE PanelKG.KGID = akgid
AND pt.name = 'MyHyperknowledge'
AND sn.name = 'MyHyperknowledge'
AND PanelKG.IsValid = 1
AND pv.Visible = 1
AND p.ID NOT IN (SELECT PersonID
FROM excluded_users))
-- return results for the correct page
SELECT PersonId,
UserText,
AvatarFilename
FROM PagingList
WHERE ID > l_MinRecordsOnAPge - aOffset
AND ID <= l_MaxRecordsOnAPge - aOffset;
ORDER BY usertext; -- moved the order here, as it didn't make sense to leave it in the subquery!
END QueryInterestedUsers;
/ Please also take note of the fact that you don't appear to have defined a value for "l_TopLevelTopicGroup" anywhere!
HTH -
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 RegardsPlease 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. -
Hi Friends,
I am getting this error : ORA-00932: inconsistent datatypes: expected DATE got NUMBER at OCI call OCIStmtExecute when I am trying to put the filter condition on the date column.
"Dim-Time"."Day" <= cast(MAX("Dim-Time"."Day") as date) and "Dim-Time"."Day" >= TIMESTAMPADD(SQL_TSI_MONTH, -1,cast(MAX("Dim-Time"."Day") as date).
I have casted the max date but though I am getting the above error. I am thinking max(date) is creating the problem.
Please suggest your on opinion this.
Thanks.Not sure why you need cast in your statement if at all it is required then you need to do as below
cast("Dim-Time"."Day" as date)<= cast(MAX("Dim-Time"."Day") as date) and cast("Dim-Time"."Day" as date) >= TIMESTAMPADD(SQL_TSI_MONTH, -1,cast(MAX("Dim-Time"."Day") as date).
~ http://cool-bi.com -
Error: PL/SQL ORA-00932 inconsistent datatype when using LONG value
Good morning:
I am using a work PL/SQL script where I am using a LONG value in a cursor. When I execute it, I am receiving:
PL/SQL ORA-00932 inconsistent datatype: expected NUMBER got LONG
set serveroutput ON SIZE 1000000
set heading off
set feedback off
set trimspool off
set echo off
set term off
set pagesize 0
SPOOL &so_outfile;
DECLARE
v_data_file varchar2(30);
-- v_sch_code varchar2(10);
-- v_instance_name varchar2(10);
ws_path payroll.pybutfl.pybutfl_utl_file_path%TYPE;
v_data_line VARCHAR2 (2000) := NULL;
fhandle_o UTL_FILE.file_type;
v_line_count NUMBER := 0;
v_selected_count NUMBER := 0;
v_error_count NUMBER := 0;
v_written_count NUMBER := 0;
v_error_text VARCHAR2 (50) := ' AMACONF_ERR: Unable to write the line. ';
v_errm VARCHAR2 (255);
v_sqlerrm VARCHAR2 (255);
v_payment_type VARCHAR2(10);
CURSOR C1 IS
select RTRIM
AMRCONF_PIDM_ERR ||'|'||
AMRCONF_IDEN_CODE_ERR ||'|'||
AMRCONF_ENTRY_DATE_ERR ||'|'||
AMRCONF_CONFID_IND_ERR ||'|'||
*AMRCONF_COMMENT_ERR ||'|'||*
AMRSUBJ_SUBJ_CODE_ERR ||'|'||
ERROR_CODE ||'|'||
ERROR_CODE_TEXT ) data_line
from WSUALUMNI.AMRCONF_ERR;
BEGIN
DBMS_OUTPUT.put_line ('Program Generating AMACOMT Mass Update Error File ');
IF UTL_FILE.is_open (fhandle_o)
THEN
UTL_FILE.fclose (fhandle_o);
END IF;
/* Name The File Here */
v_data_file := ('Amaconf_error.txt');
SELECT RTRIM (pybutfl_utl_file_path)
INTO ws_path
FROM payroll.pybutfl;
fhandle_o := UTL_FILE.fopen (ws_path, v_data_file, 'w');
DBMS_OUTPUT.put_line ('UTLFILE file for this run is: ' || ws_path||'/'||v_data_file);
v_written_count := 0;
FOR c1_rec IN C1 LOOP
BEGIN
v_selected_count := v_selected_count + 1;
v_data_line := rtrim(c1_rec.data_line);
UTL_FILE.put_line (fhandle_o, v_data_line);
v_written_count := v_written_count + 1;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (v_error_text);
v_error_count := v_error_count + 1;
END;
END LOOP;
DBMS_OUTPUT.put_line ('Number of Records Selected: ' || v_selected_count);
DBMS_OUTPUT.put_line ('Number of Records Written: ' || v_written_count);
IF UTL_FILE.is_open (fhandle_o)
THEN
UTL_FILE.fclose (fhandle_o);
END IF;
END;
SPOOL OFF;If I comment out the "AMRCONF_COMMENT_ERR ||'|'||" line, then the script works fine. The table was created as:
Create Table WSUALUMNI.AMRCONF_ERR
AMRCONF_PIDM_ERR NUMBER (8) NOT NULL,
AMRCONF_IDEN_CODE_ERR VARCHAR2(5) NOT NULL,
AMRCONF_ENTRY_DATE_ERR DATE NOT NULL,
AMRCONF_CONFID_IND_ERR VARCHAR2(1),
AMRCONF_COMMENT_ERR LONG,
AMRSUBJ_SUBJ_CODE_ERR VARCHAR2(5) NOT NULL,
ERROR_CODE VARCHAR2(12) NOT NULL,
ERROR_CODE_TEXT VARCHAR2(50) NOT NULL
); I don't get what is the problem here in the script.Hi,
Feew suggestions
1) LONG is a deprecated type hence if possible start working on changing that column
2) CLOB will your preferred datatype over LONG.
3) you cannot use RTRIM on long.
here is a very quick example
drop table h
create table h (x long,y varchar2(100))
select rtrim(x) from h
select rtrim(y) from hSolution:
[http://www.oracle.com/technology/oramag/code/tips2003/052503.html]
need a better solution change the datatype to clob and
drop table h
create table h (x clob,y varchar2(100))
select dbms_lob.substr( x, 4000, 1 ) from h
select rtrim(y) from hCheers!!!
Bhushan -
ORA-00932 (Inconsistent datatype) on BLOB field in a view using Forms 6i
Hi
I created a table having a BLOB column and populate it with images and also make queries on that table using form 6i but when I use a view to build a form which built on that table when I try to query I receive the following error :
ORA-00932:Inconsistent datatype
The view created as simple as SELECT * FROM MY_TABLE and there is no problem with other columns in that view but BLOB column. I am using FORMS 6i (6.0.8.11.3)
I would be so glad if someone could help me.
thanx.I solved this problem by installing Forms 6i Patch 4a.
It was so easy, but I don't know if there is easier way to solve this problem.
Behrooz. -
Sync error....ORA-00932 Inconsistent datatypes
Hey all,
I am getting the following error when syncing:
MS-9109 n@86e554 (this seems to be random string) || ORA-00932: inconsistent datatypes
Now, I've narrowed it down to the field that causes this error to occur. It is important to note that if I don't touch the field (just keep the initial value from the initial sync to 8.1.7, things sync fine.
The error only occurs if I change the field value in 9iLite (which I am doing through me eVB app).
In 9iLite it is defined as:
Data_Type = Number, Len = 5, N = Y, Prec = 5, Scale = 4
In 8.1.7 it is defined as:
Data_type = Number (5,4) Null = N
I'm not sure why in Lite null is Y and in 8.1.7 null is N. I just let Oracle create the lite tables based on my snapshot. At any rate, the field is not null.
Does anyone have any thoughts? Does anyone know what the first part (MS-9109) of the error message is about? I can't find anything on it in Google.
Thx.
DarrenWell,
If fixed my problem. I just re-wrote the sql I had defined in the snapshot for the table in question. Still not sure why it didn't initally work as I didn't change the logic at all.
Darren. -
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. -
[8i] Case statement generates ORA-00932: inconsistent datatypes
Note: I am working with an 8i database (yes, it is quite old), and in this situation, I have to deal with the datatypes (i.e. CHAR), I am given to work with.
I am attempting to calculate the amount of time product waits between manufacturing steps. As I've discovered though, sometimes I get a negative value when subtracting the date the previous step completes from the date the current step starts. As it is generally impossible to start a later step before an earlier step (imagine trying to screw a cap onto a bottle that doesn't have threads cut yet--it just can't happen), what I've found is that sometimes two steps are started on the same day and finished on the same day (though not necessarily the day they started). This situation CAN happen when one person did both steps and logged on to both steps at the same time, rather than logging on to one, then the other. So, what I need to do in these situations is replace the negative number with a zero (I'll treat the later step as having no wait time).
Here is some sample data:
(Note: the real data set is the result of a query, and has around 200K rows and more columns, but this should be representative enough to find a solution that works on my actual application.)
CREATE TABLE steps
( item_id CHAR(25)
, ord_nbr CHAR(10)
, sub_nbr CHAR(3)
, step_nbr CHAR(4)
, start_date DATE
, finish_date DATE
INSERT INTO steps
VALUES ('A','0000000001','001','0010',TO_DATE('01/01/2011','mm/dd/yyyy'),TO_DATE('01/02/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('A','0000000001','001','0020',TO_DATE('01/01/2011','mm/dd/yyyy'),TO_DATE('01/02/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('A','0000000001','001','0030',TO_DATE('01/05/2011','mm/dd/yyyy'),TO_DATE('01/06/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('A','0000000001','002','0010',TO_DATE('01/01/2011','mm/dd/yyyy'),TO_DATE('01/02/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('A','0000000001','002','0020',TO_DATE('01/04/2011','mm/dd/yyyy'),TO_DATE('01/04/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('A','0000000001','002','0030',TO_DATE('01/06/2011','mm/dd/yyyy'),TO_DATE('01/07/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('B','0000000002','001','0005',TO_DATE('01/10/2011','mm/dd/yyyy'),TO_DATE('01/12/2011','mm/dd/yyyy'));
INSERT INTO steps
VALUES ('B','0000000002','001','0025',TO_DATE('01/10/2011','mm/dd/yyyy'),TO_DATE('01/12/2011','mm/dd/yyyy'));Here is the query I use that returns negative values sometimes:
SELECT item_id
, ord_nbr
, sub_nbr
, step_nbr
, start_date - last_step_finished
FROM (
SELECT s.*
, LAG (s.finish_date) OVER (
PARTITION BY s.item_id
, s.ord_nbr
, s.sub_nbr
ORDER BY s.step_nbr
) AS last_step_finished
FROM steps s
Returns:
ITEM_ID ORD_NBR SUB STEP START_DATE-LAST_STEP_FINISHED
A 0000000001 001 0010
A 0000000001 001 0020 -1.000
A 0000000001 001 0030 3.000
A 0000000001 002 0010
A 0000000001 002 0020 2.000
A 0000000001 002 0030 2.000
B 0000000002 001 0005
B 0000000002 001 0025 -2.000These are the results I want to see:
ITEM_ID ORD_NBR SUB STEP START_DATE-LAST_STEP_FINISHED
A 0000000001 001 0010
A 0000000001 001 0020 0.000
A 0000000001 001 0030 3.000
A 0000000001 002 0010
A 0000000001 002 0020 2.000
A 0000000001 002 0030 2.000
B 0000000002 001 0005
B 0000000002 001 0025 0.000And this is what I tried to do to get those results (comment notes what line generated the error):
SELECT item_id
, ord_nbr
, sub_nbr
, step_nbr
, CASE
WHEN start_dt - last_step_finished < 0
THEN 0
ELSE start_dt - last_step_finished -- THIS LINE GENERATES THE ORA-00932 ERROR
END AS days_in_queue
FROM (
SELECT s.*
, LAG (s.finish_date) OVER ( PARTITION BY s.item_id
, s.ord_nbr
, s.sub_nbr
ORDER BY s.step_nbr
) AS last_step_finished
FROM steps s
);I know I've had inconsistent datatype errors before with case statements in this particular 8i database, but I can't seem to figure out why I'm getting one this time. I think it has something to do with the NULL values that can occur for last_step_finished. Also, if I change the case statement to:
, CASE
WHEN start_dt - last_step_finished < 0
THEN NULL
ELSE start_dt - last_step_finished -- THIS LINE GENERATES THE ORA-00932 ERROR
END the query runs just fine. But, I don't want NULL, I want 0. In the next level of this query, I will be taking averages by item_id/step_nbr, and I want the 0's to be included in the average. (NULL values, as far as I can tell, would be excluded. AVG(NULL, 1, 2) =AVG (1,2) = 1.5 NOT AVG(0,1,2) = 1).
Thanks in advance!Thanks, TO_NUMBER did the trick. Since you didn't state in your post where to use TO_NUMBER, here is my final solution, in case anyone in the future looks through this thread to find an answer to their question:
SELECT item_id
, ord_nbr
, sub_nbr
, step_nbr
, CASE
WHEN start_dt - last_step_finished < 0
THEN 0
ELSE TO_NUMBER(start_dt - last_step_finished)
END AS days_in_queue
FROM (
SELECT s.*
, LAG (s.finish_date) OVER ( PARTITION BY s.item_id
, s.ord_nbr
, s.sub_nbr
ORDER BY s.step_nbr
) AS last_step_finished
FROM steps s
);Edited by: user11033437 on Jun 27, 2011 11:17 AM
I see you edited your post to add TO_NUMBER to it. -
Help with error select case statement (ORA-00932: inconsistent datatypes)
Hi,
I'm struggling to get my sql query work on Oracle..
I have a table MyTable with 5 columns ( Column1, Column2, Column3, Column4, Column5 ) all are of type NVARCHAR2.
I need to check whether Column 3, Column 4 are empty or not in that order..and if they values then I wanna append it to Column2.
For example
If a row contains the following values,
Column 2 = a.b
Column 3 = 123
Column 4 = xyz
then column CA = a.b/123/xyz where column CA = temp column
If either Column 3 or Column 4 is empty/null, then I don't need to append value for that column..
For example
Column 2 = a.b
Column 3 = either NULL or ''
Column 4 = xyz
then CA = a.b/xyz where column CA = temp column
similarly..
Column 2 = a.b
Column 3 = 123
Column 4 = either NULL or ''
then CA = a.b/123 where column CA = temp column
Here is my query..
select MyTable.Column1 as CA0,
MyTable.Column2 as CA1,
MyTable.Column3 as CA2,
MyTable.Column4 as CA3,
MyTable.Column5 as CA4,
MyTable.Column2 + CASE WHEN MyTable.Column3 > '' THEN '/' + MyTable.Column3 ELSE '' END + CASE WHEN MyTable.Column4 > '' THEN '/' + MyTable.Column4 ELSE '' END CA
from MyTable;
This query works just fine against SQL Server db, but gainst Oracle I'm getting
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
00932. 00000 - "inconsistent datatypes: expected %s got %s"
Could you please let me know what I'm doing wrong. I need to get this query working on both SQL Server and Oracle..
Please let me know your suggestions and thoughts..
Cheers,I need to check whether Column 3, Column 4 are empty or not in that order..and if they values then I wanna append it to Column2. In Oracle, you can do it this way - no need to do all kinds of difficult things:
select col2||col3||col4
from tbl -
Oracle 10g Issue [ORA-00932: inconsistent datatypes: expected ]
Hi,
The following Code Snippet works fine in Oracle 9i DB but gives "ORA-00932: inconsistent datatypes: expected - got -; " error in 10g DB. We are facing lot of issues with this since we migrated application to 10g
create or replace procedure cca is
TYPE Cur_OPCols_Typ IS REF CURSOR;
l_Cur_OPCols Cur_OPCols_Typ;
str VARCHAR2(32767) :='select sysdate, 123 from dual';
TYPE StringTyp IS TABLE OF VARCHAR2(7000) INDEX BY BINARY_INTEGER;
capture StringTyp;
BEGIN
Open l_Cur_OPCols FOR str;
FETCH l_Cur_OPCols BULK COLLECT INTO capture;
dbms_output.put_line (capture.COUNT);
Close l_Cur_OPCols;
END cca;
Please advise...
Regards,
ChinmayBut...
SQL> select * from v$version;
BANNER
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for Solaris: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
<br>
<br>
"afiedt.buf" 13 lines, 370 characters
1 declare
2 TYPE Cur_OPCols_Typ IS REF CURSOR;
3 l_Cur_OPCols Cur_OPCols_Typ;
4 str VARCHAR2(32767) :='select sysdate, 123 from dual';
5 TYPE StringTyp IS TABLE OF VARCHAR2(7000) INDEX BY BINARY_INTEGER;
6 capture StringTyp;
7 BEGIN
8 Open l_Cur_OPCols FOR str;
9 FETCH l_Cur_OPCols BULK COLLECT INTO capture;
10 dbms_output.put_line (capture.COUNT);
11 Close l_Cur_OPCols;
12* END cca;
SQL> /
declare
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got -
ORA-06512: at line 9
Maybe you are looking for
-
Passing CPM variable value to BW report/query
Is it possible to pass CPM variable values from SEM scorecard to BW supporting reports.
-
Today, 6/18/2014, on my laptop, running Win8.0, a Firefox icon appeared on the taskbar, saying a new version 30.0 was available. I clicked on it, but missed as it closed. Upon opening the hidden icons, I clicked on the Firefox icon, the words 'update
-
In CS6 how to change rulers to decimal inches
In CS6 how do you changes rulers to decimal inches
-
Hello, I have a webapp and an EJB. In my webapp, I use a ThreadLocal to put an object I want to be accessible from everywhere. When I call the EJB, this object is no more present in the ThreadLocal to the EJB-side. How can I pass this object from the
-
Is there any thing worng in my catch statements .because when i do debug the curser not catching the catch statements TRY. CALL METHOD z_co_ifoasy_01_sa_gl=>execute_asynchronous EXPORTING output = gv_zsafe_mt_acc_gl_posti