Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: SQL runs but fails inside a PL/SQL (ORACLE 8i)
And plsql's sql lags behind in sql syntax.
You cannot do select a, (select b from dual) from dual; ^^^^^^^^^^^^^^^in pl/sql (last time I checked in 8.1.6). example:
1 (SELECT2FROMDUAL)
---------- ----------------- 1 2
sql> declare
2 a number;
3 b number;
4 begin
5 select 1, (select 2 from dual) into a,b from dual;
6 end;
7 /
select 1, (select 2 from dual) into a,b from dual;
*
ERROR at line 5:
ORA-06550: line 5, column 12:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
( - + mod 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 time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string>
ORA-06550: line 5, column 32:
PLS-00103: Encountered the symbol "INTO" when expecting one of the following:
; return returning and or
sql> declare
2 a number;
3 b number;
4 begin
5 select 1, 2 into a,b from dual;
6 end;
7 /
PL/SQL procedure successfully completed.
You need to re-write the sql to be pl/sql compliant.
I guess in 9i you should be able to do it .. though I have not checked it myself.
Anurag
"Jim Kennedy" <kennedy-down_with_spammers_at_attbi.com> wrote in message news:CKW4a.183087$be.163658_at_rwcrnsc53...
> substr(bm.stat_date,-7) = '01/2003'; > doesn't look right. If bm.stat_date is a date then a substr of a date is > not a good idea. (dates are not strings, dates are dates. They can be > formatted as strings.) So maybe you meant > substr(to_char(bm.stat_date,'mm/dd/yyyy'),-7) = '01/2003'; > which could be done > to_char(bm.stat_date,'dd/yyyy') = '01/2003'; > > Jim > > > > -- > Replace part of the email address: kennedy-down_with_spammers_at_attbi.com > with family. Remove the negative part, keep the minus sign. You can figure > it out. > "Mai Dang" <mdang_at_bigpond.com.au> wrote in message > news:b31brh$3p7$1_at_mws-stat-syd.cdn.telstra.com.au... > > Hi, > > > > I wonder if anyone can help me where I did wrong in the following PL/SQL > > > > If I only run the DELETE and INSERT Statements without CURSOR, then SQL > > works, by replacing > > to_char(aggr_date, 'DD/MM/YYYY') with '01/01/2003'). > > > > But if I compile the whole PL/SQL then it ended up with > > > > Error Message > > ============ > > Connected. > > (SELECT VERSION > > * > > ERROR at line 16: > > ORA-06550: line 16, column 8: > > PLS-00103: Encountered the symbol "SELECT" when expecting one of the > > following: > > ( - + mod 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 time timestamp interval date > > <a string literal with character set specification> > > <a number> <a single-quoted SQL string> > > ORA-06550: line 19, column 33: > > PLS-00103: Encountered the symbol "VERSION" when expecting one of the > > following: > > ; return returning and or > > The symbol "return" was substituted for "VERSION" to continue. > > ORA-06550: line 23, column 7: > > PLS-00103: Encountered the symbol "FROM" when expecting one of the > > following: > > , into bulk > > > > > > PL/SQL: > > ======= > > > > set serveroutput on; > > DECLARE > > CURSOR bm_cursor IS > > SELECT to_date(bm.stat_date, 'DD/MM/YYYY') As stat_date FROM > > cq_vps_aggr_cc_perform_bm_v8 bm where bm.BM= 'BM1' and > > substr(bm.stat_date,-7) = '01/2003'; > > aggr_date DATE; > > BEGIN > > FOR bm_rec IN bm_cursor LOOP > > aggr_date := bm_rec.stat_date; > > IFaggr_date = '01-JAN-2003' THEN > > DELETE FROM CQ_VPS_AGGR_CC_PERFORM_CBM_V8 > > WHERE BM = 'CBM4' AND stat_date = to_char(aggr_date, 'DD/MM/YYYY'); > > COMMIT; > > > > INSERT INTO CQ_VPS_AGGR_CC_PERFORM_CBM_V8 > > (SELECT > > to_char(aggr_date, 'DD/MM/YYYY') STAT_DATE, > > (SELECT VERSION > > FROM CQ_VPS_AGGR_CC_PERFORM_CBM_V8 > > WHERE stat_date = to_char(aggr_date, 'DD/MM/YYYY') > > AND BM IN ('CBM1')) VERSION, > > 'CBM4' AS BM, > > TOTAL, > > SYSDATE AS RUN_DATE > > FROM > > ( > > SELECT ( > > SELECT TOTAL > > FROM CQ_VPS_AGGR_CC_PERFORM_CBM_V8 > > WHERE stat_date = to_char(aggr_date, 'DD/MM/YYYY') > > AND BM IN ('CBM1')) + > > (SELECT TOTAL > > FROM CQ_VPS_AGGR_CC_PERFORM_CBM_V8 > > WHERE stat_date = to_char(aggr_date, 'DD/MM/YYYY') > > AND BM IN ('CBM2')) + > > (SELECT TOTAL > > FROM CQ_VPS_AGGR_CC_PERFORM_CBM_V8 > > WHERE stat_date = to_char(aggr_date, 'DD/MM/YYYY') > > AND BM IN ('CBM3') > > ) AS TOTAL FROM DUAL > > )); > > COMMIT; > > > > END IF; > > dbms_output.put_line(aggr_date); > > END LOOP; > > END; > > > > > > > > > >Received on Wed Feb 19 2003 - 20:55:08 CST
![]() |
![]() |