Actual source line in ORA-06550 message - oracle

When developing an Oracle PL/SQL procedure in Toad, I encounter errors like
ORA-06550: line 97, column 25: PLS-00330: invalid use of type name or subtype name
ORA-06550: line 97, column 9: PL/SQL: Statement ignored
These given line numbers and column numbers seem to have little or nothing to do with source code line numbers. Where can I find tips or tricks that will help me identify the actual source line or actual code that caused the error? This is especially important in situations like the above (which is the result of a 700+ line source) where the error message doesn't provide clues as to details of the actual problem. (By the way, line 101 in that source is the third of a series of comment lines, and is followed by a blank line.)
(Note that this is not [yet] in a stored procedure; it is being developed and executed from source at this time. Not sure if that makes a difference since at present there is no database in which we developers have authority to CREATE PROCEDURE.)
Sample code:
SET SERVEROUTPUT ON;
DECLARE
TYPE bendemo_hdr IS RECORD
(
recid CHAR(1)
, client CHAR(30)
, filedesc CHAR(30)
, seqnum CHAR(2)
, crtdate CHAR(20)
, srtdate CHAR(8)
, stpdate CHAR(8)
);
TYPE bendemo_record IS RECORD
(
recid CHAR(1)
, ssn CHAR(9)
, empnum CHAR(15)
, eeflag CHAR(1)
, titlecode CHAR(6)
, fname CHAR(30)
, mname CHAR(30)
, lname CHAR(30)
, namesuffix CHAR(6)
, prefname CHAR(30)
, dob CHAR(8)
, dod CHAR(8)
, dverdte CHAR(8)
, dauddte CHAR(8)
, ddtesrc CHAR(6)
, gender CHAR(1)
, martstat CHAR(6)
, mstateffdt CHAR(8)
, lang CHAR(1)
, citzcde CHAR(6)
, vipflag CHAR(1)
, kyeeflag CHAR(1)
, orghrdte CHAR(8)
, lathrdte CHAR(8)
, adjhrdte CHAR(8)
, jobtitle CHAR(30)
, precntmthd CHAR(6)
, mailpref CHAR(6)
, phnepref CHAR(6)
, emalpref CHAR(6)
, hmaddrefdt CHAR(8)
, hmaddr1 CHAR(60)
, hmaddr2 CHAR(60)
, hmaddr3 CHAR(60)
, hmaddr4 CHAR(60)
, hmaddcity CHAR(60)
, hmaddstate CHAR(60)
, hmaddzip CHAR(10)
, hmaddcnty CHAR(3)
, hmphcnty CHAR(6)
, hmphnbr CHAR(16)
, hmphext CHAR(4)
, mbphcnty CHAR(6)
, mbphnbr CHAR(16)
, faxcnty CHAR(6)
, faxnbr CHAR(16)
, hmemail CHAR(100)
, wkaddrefdt CHAR(8)
, wkaddr1 CHAR(60)
, wkaddr2 CHAR(60)
, wkaddr3 CHAR(60)
, wkaddr4 CHAR(60)
, wkaddcity CHAR(60)
, wkaddstate CHAR(60)
, wkaddzip CHAR(10)
, wkaddcnty CHAR(3)
, wkphcnty CHAR(6)
, wkphnbr CHAR(16)
, wkphext CHAR(4)
, wkemail CHAR(100)
, hiresrc CHAR(30)
, bgnunit CHAR(30)
, qdroflag CHAR(1)
, hiresrcdt CHAR(8)
);
TYPE bendemo_trlr IS RECORD
(
recid CHAR(1)
, client CHAR(30)
, filedesc CHAR(30)
, reccount CHAR(9)
, field1 CHAR(15)
);
demo_hdr bendemo_hdr;
demo_rec bendemo_record;
demo_trlr bendemo_trlr;
i NUMBER;
PROCEDURE dump_hdr_rec IS
BEGIN
DBMS_OUTPUT.put(bendemo_hdr.recid);
DBMS_OUTPUT.put(bendemo_hdr.client);
DBMS_OUTPUT.put(bendemo_hdr.filedesc);
DBMS_OUTPUT.put(bendemo_hdr.seqnum);
DBMS_OUTPUT.put(bendemo_hdr.crtdate);
DBMS_OUTPUT.put(bendemo_hdr.srtdate);
DBMS_OUTPUT.put(bendemo_hdr.stpdate);
DBMS_OUTPUT.put_line('<');
END dump_hdr_rec;
PROCEDURE dump_demo_rec IS
BEGIN
-- IF l_output IS NULL THEN
DBMS_OUTPUT.put(bendemo_record.recid);
DBMS_OUTPUT.put(bendemo_record.ssn);
DBMS_OUTPUT.put(bendemo_record.empnum);
DBMS_OUTPUT.put(bendemo_record.eeflag);
DBMS_OUTPUT.put(bendemo_record.titlecode);
DBMS_OUTPUT.put(bendemo_record.fname);
DBMS_OUTPUT.put(bendemo_record.mname);
DBMS_OUTPUT.put(bendemo_record.lname);
DBMS_OUTPUT.put(bendemo_record.namesuffix);
DBMS_OUTPUT.put(bendemo_record.prefname);
DBMS_OUTPUT.put(bendemo_record.dob);
DBMS_OUTPUT.put(bendemo_record.dod);
DBMS_OUTPUT.put(bendemo_record.dverdte);
DBMS_OUTPUT.put(bendemo_record.dauddte);
DBMS_OUTPUT.put(bendemo_record.ddtesrc);
DBMS_OUTPUT.put(bendemo_record.gender);
DBMS_OUTPUT.put(bendemo_record.martstat);
DBMS_OUTPUT.put(bendemo_record.mstateffdt);
DBMS_OUTPUT.put(bendemo_record.lang);
DBMS_OUTPUT.put(bendemo_record.citzcde);
DBMS_OUTPUT.put(bendemo_record.vipflag);
DBMS_OUTPUT.put(bendemo_record.kyeeflag);
DBMS_OUTPUT.put(bendemo_record.orghrdte);
DBMS_OUTPUT.put(bendemo_record.lathrdte);
DBMS_OUTPUT.put(bendemo_record.adjhrdte);
DBMS_OUTPUT.put(bendemo_record.jobtitle);
DBMS_OUTPUT.put(bendemo_record.precntmthd);
DBMS_OUTPUT.put(bendemo_record.mailpref);
DBMS_OUTPUT.put(bendemo_record.phnepref);
DBMS_OUTPUT.put(bendemo_record.emalpref);
DBMS_OUTPUT.put(bendemo_record.hmaddrefdt);
DBMS_OUTPUT.put(bendemo_record.hmaddr1);
DBMS_OUTPUT.put(bendemo_record.hmaddr2);
DBMS_OUTPUT.put(bendemo_record.hmaddr3);
DBMS_OUTPUT.put(bendemo_record.hmaddr4);
DBMS_OUTPUT.put(bendemo_record.hmaddcity);
DBMS_OUTPUT.put(bendemo_record.hmaddstate);
DBMS_OUTPUT.put(bendemo_record.hmaddzip);
DBMS_OUTPUT.put(bendemo_record.hmaddcnty);
DBMS_OUTPUT.put(bendemo_record.hmphcnty);
DBMS_OUTPUT.put(bendemo_record.hmphnbr);
DBMS_OUTPUT.put(bendemo_record.hmphext);
DBMS_OUTPUT.put(bendemo_record.mbphcnty);
DBMS_OUTPUT.put(bendemo_record.mbphnbr);
DBMS_OUTPUT.put(bendemo_record.faxcnty);
DBMS_OUTPUT.put(bendemo_record.faxnbr);
DBMS_OUTPUT.put(bendemo_record.hmemail);
DBMS_OUTPUT.put(bendemo_record.wkaddrefdt);
DBMS_OUTPUT.put(bendemo_record.wkaddr1);
DBMS_OUTPUT.put(bendemo_record.wkaddr2);
DBMS_OUTPUT.put(bendemo_record.wkaddr3);
DBMS_OUTPUT.put(bendemo_record.wkaddr4);
DBMS_OUTPUT.put(bendemo_record.wkaddcity);
DBMS_OUTPUT.put(bendemo_record.wkaddstate);
DBMS_OUTPUT.put(bendemo_record.wkaddzip);
DBMS_OUTPUT.put(bendemo_record.wkaddcnty);
DBMS_OUTPUT.put(bendemo_record.wkphcnty);
DBMS_OUTPUT.put(bendemo_record.wkphnbr);
DBMS_OUTPUT.put(bendemo_record.wkphext);
DBMS_OUTPUT.put(bendemo_record.wkemail);
DBMS_OUTPUT.put(bendemo_record.hiresrc);
DBMS_OUTPUT.put(bendemo_record.bgnunit);
DBMS_OUTPUT.put(bendemo_record.qdroflag);
DBMS_OUTPUT.put(bendemo_record.hiresrcdt);
DBMS_OUTPUT.put_line('<');
END dump_demo_rec;
PROCEDURE dump_hdr_trlr IS
BEGIN
DBMS_OUTPUT.put(bendemo_trlr.recid);
DBMS_OUTPUT.put(bendemo_trlr.client);
DBMS_OUTPUT.put(bendemo_trlr.filedesc);
DBMS_OUTPUT.put(bendemo_trlr.reccount);
DBMS_OUTPUT.put(bendemo_trlr.field1);
DBMS_OUTPUT.put_line('<');
END dump_hdr_trlr;
BEGIN
demo_bendemo_hdr.recid := 'x';
demo_bendemo_hdr.client := 'Client';
demo_bendemo_hdr.filedesc := 'Descr';
demo_bendemo_hdr.seqnum := 'a';
demo_bendemo_hdr.crtdate := 'Created';
demo_bendemo_hdr.srtdate := 'Sorted';
demo_bendemo_hdr.stpdate := 'stop';
dump_demo_hdr(l_output, demo_hdr);
END;

Without seeing an example of the sort of code you are running it is hard to be sure if this answer is relevant, but the line number specified in the message relates to the overall block of PL/SQL being compiled, and ignores any blank lines or comments before that line. For example if your script says (with line numbers added for clarity only):
1
2 -- test script
3
4
5 begin
6
7 rubbish;
8
9 end;
Then when you try to run it you will get the error:
ORA-06550: line 3, column 3:
PLS-00201: identifier 'RUBBISH' must be declared ...
It says line 3 not line 7 because "rubbish;" is the 3rd line of the PL/SQL being compiled. The blank lines and comments above that do not count. Blank lines and comments within the block do count however.
EDIT
So, applying my rule to the code sample you posted we can ignore the 2 lines above DECLARE and so "line 97" is the 99th line:
DBMS_OUTPUT.put(bendemo_hdr.recid);
But bendemo_hdr is a TYPE not a variable, and so it makes no sense in this statement, hence the error. It is analagous to writing:
DBMS_OUTPUT.put(CHAR(1)); --!!!
What you probably meant was:
DBMS_OUTPUT.put(demo_hdr.recid);

Related

Not able to set default value in sqlloader

I am trying to load default value using sqlloader from a unix box, while my file only contains one column.
Below is my table structure:
CREATE TABLE DATA_LOAD(
SEQUENCE_NUMBER NUMBER(15)
CONSTRAINT SEQUENCE_NUMBER NOT NULL,
Account NUMBER(12)
CONSTRAINT Account NOT NULL,
SYS_CREATION_DATE DATE NOT NULL,
SYS_UPDATE_DATE DATE ,
OPERATOR_ID NUMBER(9) ,
APP_ID CHAR(6),
SERVICE_CODE CHAR(5) NOT NULL,
UPDATE_STAMP NUMBER(4),
ACCOUNT_TYPE CHAR(1),
ACCOUNT_SUB_TYPE CHAR(1),
STATUS VARCHAR2(2),
OPER_IND CHAR(1),
ERROR_REASON VARCHAR2(240)
)
File will contain only:
123476810
and I am trying to load with
LOAD DATA
INFILE '$INPUT_FILE'
INTO TABLE DATA_LOAD
FIELDS TERMINATED BY '$'
TRAILING NULLCOLS
(
Account,
SEQUENCE_NUMBER default 2,
STATUS default R,
OPER_IND default N,
SERVICE_CODE default abcde,
SYS_CREATION_DATE default to_date(sysdate,'DD-MON-YY')
)
getting this error:
SQL*Loader-350: Syntax error at line 9.
Expecting "," or ")", found "default".
SEQUENCE_NUMBER default 2,
Your syntax seems to be wrong. You need to be using CONSTANT
OPER_IND CONSTANT "N"

"Error at Command Line : 1 Column : 698 Error report - SQL Error: ORA-00984: column not allowed here

INSERT INTO
FLAG ("OPT_FLAG_KEY","H_KEY","FIRST_NAME","LAST_NAME",
"MIDDLE_NAME","TITLE","CREDENTIALS","ADDRESS_LINE_1",
"ADDRESS_LINE_2","ADDRESS_LINE_3","CITY","STATE",
"POSTAL_CODE","PHONE_NUMBER","BUSIN_PHONE","DECEASED",
"OPT_FLAG","OPT_FLAG_DATE","SOU_KEY","SOU_FILE_ID",
"SOU_FILE_ID_TEXT","BAT_ID","PHONE_NUMBER_SOURCE","BIRTH_DATE")
VALUES(37009326,4,'Daniel','Boyle',NULL,NULL,NULL,'368 Road',
NULL,NULL,'Doylown','BVBV',1801,NULL,NULL,'NO','OUT',
TO_CHAR('10-AUG-16','DD/MM/YYYY'),201,
TO_DATE(SUBSTR('vhic_pavir_20160810.txt',12,8),YYYYMMDD),
'2016-08-10',598441,NULL,TO_DATE('03-FEB-1952',DD-MM-YYYY));
I have run this query in my DB am getting some error like below
Error at Command Line : 1 Column : 698
Error report
SQL Error: ORA-00984: column not allowed here
00984. 00000 - "column not allowed here"
*Cause:
*Action:"
Edit: this is my desc of my table:
Name Null Type
------------------- ---- -------------
OPT_FLAG_KEY NUMBER(14)
H_KEY NUMBER(14)
FIRST_NAME VARCHAR2(50)
LAST_NAME VARCHAR2(50)
MIDDLE_NAME VARCHAR2(50)
TITLE VARCHAR2(50)
CREDENTIALS VARCHAR2(50)
ADDRESS_LINE_1 VARCHAR2(100)
ADDRESS_LINE_2 VARCHAR2(100)
ADDRESS_LINE_3 VARCHAR2(100)
CITY VARCHAR2(50)
STATE VARCHAR2(20)
POSTAL_CODE VARCHAR2(20)
PHONE_NUMBER VARCHAR2(100)
BUSIN_PHONE VARCHAR2(100)
DECEASED VARCHAR2(5)
OPT_FLAG VARCHAR2(10)
OPT_FLAG_DATE DATE
SOU_KEY NUMBER(14)
SOU_FILE_ID DATE
SOU_FILE_ID_TEXT VARCHAR2(20)
BATCH_ID NUMBER(14)
PHONE_NUMBER_SOURCE VARCHAR2(100)
BIRTH_DATE DATE
There are several issue with your statement. First, double-quotes are not required on column names (unless you have mixed cases or space), remove them.
TO_CHAR('10-AUG-16','DD/MM/YYYY') -> 10-AUG-16 is a string, not a date. Thus it does not make any sense to convert a string to a string
TO_DATE(SUBSTR('vhic_pavir_20160810.txt',12,8),YYYYMMDD) -> Format must be in single-quotes, i.e. TO_DATE(SUBSTR('vhic_pavir_20160810.txt',12,8),'YYYYMMDD')
'2016-08-10' -> do you like to insert a DATE value or a string? You provided a string, not a date.
TO_DATE('03-FEB-1952',DD-MM-YYYY)) -> Format must be in single-quotes, see above. MM means the month number, not the month name.

ORA-01722: invalid number with to_char timestamp

First, the table I'm trying to insert into is this table:
CREATE TABLE Message
(
MessageID varchar2(80) NOT NULL,
Message varchar2(500),
SendDate date NOT NULL,
SendID varchar2(50) NOT NULL,
Request_ID varchar2(50) NOT NULL,
PRIMARY KEY (MessageID)
);
and my insert query is this(Spring, mybatis):
INSERT INTO message (
messageid
, message
, senddate
, sendId
, request_Id
)VALUES(
#{sendidjbuser} + TO_CHAR(systimestamp, 'yyyymmddhh24missff3')
, #{message}
, sysdate
, #{sendidjbuser}
, #{requestIdjbuser}
)
I tried this on cmd and this part of the above query was the problem:
INSERT INTO message (messageId) VALUES('sendId' + TO_CHAR(systimestamp, 'yyyymmddmissff3'))
I'm on Oracle 11. I just tried inserting only TO_CHAR(systimestamp, 'yyyymmddmissff3') without adding that to a string and it worked. But I do need that part to work. Is there a right way to do that?
In Oracle, please use || or CONCAT() function to concatenate strings. You are using '+', hence getting the error.

Decode() in Oracle

What is the syntax for decode() function of oracle to encrypt string in
Example :- if i want to encrypt 'suvendu' with'***' and 'mohan' with '$$$' for column fname of samples table
desc samples
Name Null Type
------ -------- ------------
EMP_ID VARCHAR2(20)
LNAME CHAR(10)
FNAME CHAR(20)
DEPT CHAR(20)
SAL NOT NULL NUMBER(12,2)
H_DATE DATE
EMAIL VARCHAR2(20)
DESG VARCHAR2(25)
While you can use DECODE to handle this, as in:
SELECT DECODE(FNAME,
'suvendu', '***',
'mohan', '$$$',
FNAME) AS DERIVED_COL
FROM SAMPLES
IMO using a CASE expression is a better choice
SELECT CASE FNAME
WHEN 'suvendu' THEN '***'
WHEN 'mohan' THEN '$$$'
ELSE FNAME
END AS DERIVED_COL
FROM SAMPLES
as it makes it clearer what's going on and is easier to read.
Best of luck.
Updated(try this):
SELECT
DECODE(fname,'suvendu', '***', 'mohan", '$$$') AS F_NAME
--add other columns/column-list here if needed
FROM
samples
The line starting with -- is a commented line

ORA-00932: inconsistent datatypes

I'm trying to CAST MULTISET an object via PL/SQL and I'm getting the error mentioned in the subject.
I've checked the datatypes defined in the object itself and the columns in the tables and they appear to match. Same goes for the order I get the values and the order in the object.
But I keep getting the error, here is the full code:
CREATE OR REPLACE TYPE TASK_DESTINATION_LIST_OBJTYP AS OBJECT
(
ENTITY_ID NUMBER(9)
,ENTITY_CODE NUMBER(3)
,ENTITY_NAME VARCHAR2(255)
,ENTITY_FAVOTIRE NUMBER(1)
,ENTITY_PATH VARCHAR2(1535)
,STATE_CODE NUMBER(3)
,STATE_NAME VARCHAR2(50)
,RES_MSG VARCHAR2(2000)
)
/
CREATE TYPE TASK_DESTINATION_LIST_COLTYP AS TABLE OF TASK_DESTINATION_LIST_OBJTYP
The Query:
SELECT Decode (tsk_info_t.dest_dev_id,NULL,
tsk_info_t.dest_srv_id,
tsk_info_t.dest_dev_id) AS entity_id,
Decode (tsk_info_t.dest_dev_id,
NULL,1,3) AS entitytyp_code,
Decode (tsk_info_t.dest_dev_id,NULL,
tsk_info_t.dest_srv_name,
tsk_info_t.dest_dev_name) AS entity_name,
(
SELECT Count(*)
FROM pref_info_t
WHERE Nvl (dev_id, 0) = Nvl (tsk_info_t.dest_dev_id, 0)
AND srv_id = tsk_info_t.dest_srv_id) AS entity_favotire,
Decode (tsk_info_t.dest_dev_id,NULL,
(
SELECT path
FROM entity_path_view
WHERE dev_id IS NULL
AND srv_id = tsk_info_t.dest_srv_id),
(
SELECT path
FROM entity_path_view
WHERE dev_id = dest_dev_id
AND srv_id = dest_srv_id)) AS entity_path,
tsk_info_t.state_code AS state_code,
(
SELECT state_type_name
FROM ref_state_type
WHERE state_type_code = state_code ) AS state_name,
tsk_info_t.res_msg AS res_msg
FROM tsk_info_t
WHERE tsk_info_t.tsk_id = 5957
ORDER BY tsk_info_t.dest_srv_name,
tsk_info_t.dest_dev_name ASC)
AS task_destination_list_coltyp )
AS destination_list

Resources