sql 缺少语法和错误处理
sql syntax is missing & error handling
我想处理 sql 脚本中的错误,我已经为 it.But 设置了一些无法正常工作的语句。我想我缺少开始和结束声明的位置。
这是我的 sql 脚本,请更正它。
set colsep ',';
set trimout off;
set pagesize 0;
set trimspool off;
set feedback off;
set heading off;
set heading off;
set verify off;
set errorlogging on;
var envame varchar2(20)
exec :envame := '&1'
set errorlogging on;
spool C:\UsersDesktop\batch\pres64.csv app
begin
select '&&1', user_name, user_id from employee where designation = 'manager';
exception
when others then
dbms_output.put_line('ERROR');
end;
exit;
输出为
12
13
14
15
.
.
请提出修改意见..
spool C:\UsersDesktop\batch\pres64.csv app
begin
select '&&1', user_name, user_id from employee where designation = 'manager';
exception when others then
dbms_output.put_line('ERROR');
您将 SQL*Plus
与 PL/SQL
异常处理混为一谈。 SPOOL
是一个 SQL*Plus 命令。如果您使用 BEGIN-END
PL/SQL 块,它将不起作用。
由于您正在使用 SQL*Plus
,我强烈建议您使用新的 SQL*Plus 错误记录功能 而不是在 [=29] =]PL/SQL。它是在 版本 11.1 中引入的。
我在这里写了一篇关于它的文章http://lalitkumarb.wordpress.com/2014/01/21/sqlplus-error-logging-new-feature-release-11-1/
例如,
SQL> set errorlogging on
SQL> show errorlogging
errorlogging is ON TABLE LALIT.SPERRORLOG
SQL> desc sperrorlog
Name Null? Type
----------------------------------------- -------- -----------------------
USERNAME VARCHAR2(256)
TIMESTAMP TIMESTAMP(6)
SCRIPT CLOB
IDENTIFIER VARCHAR2(256)
MESSAGE CLOB
STATEMENT CLOB
SQL> selct * from dual;
SP2-0734: unknown command beginning "selct * fr..." - rest of line ignored.
SQL>
所以,上面的 SP2 错误 现在 logged 在 sperrorlog table.
SQL> select timestamp, username, statement, message from sperrorlog;
TIMESTAMP USERNAME STATEMENT MESSAGE
------------------------------ -------- -------------------- --------------------------------------------------
06-APR-15 10.42.49.000000 AM LALIT selct * from dual; SP2-0734: unknown command beginning "selct * fr...
" - rest of line ignored.
SQL>
我想处理 sql 脚本中的错误,我已经为 it.But 设置了一些无法正常工作的语句。我想我缺少开始和结束声明的位置。 这是我的 sql 脚本,请更正它。
set colsep ',';
set trimout off;
set pagesize 0;
set trimspool off;
set feedback off;
set heading off;
set heading off;
set verify off;
set errorlogging on;
var envame varchar2(20)
exec :envame := '&1'
set errorlogging on;
spool C:\UsersDesktop\batch\pres64.csv app
begin
select '&&1', user_name, user_id from employee where designation = 'manager';
exception
when others then
dbms_output.put_line('ERROR');
end;
exit;
输出为 12 13 14 15 . . 请提出修改意见..
spool C:\UsersDesktop\batch\pres64.csv app
begin
select '&&1', user_name, user_id from employee where designation = 'manager';
exception when others then
dbms_output.put_line('ERROR');
您将 SQL*Plus
与 PL/SQL
异常处理混为一谈。 SPOOL
是一个 SQL*Plus 命令。如果您使用 BEGIN-END
PL/SQL 块,它将不起作用。
由于您正在使用 SQL*Plus
,我强烈建议您使用新的 SQL*Plus 错误记录功能 而不是在 [=29] =]PL/SQL。它是在 版本 11.1 中引入的。
我在这里写了一篇关于它的文章http://lalitkumarb.wordpress.com/2014/01/21/sqlplus-error-logging-new-feature-release-11-1/
例如,
SQL> set errorlogging on
SQL> show errorlogging
errorlogging is ON TABLE LALIT.SPERRORLOG
SQL> desc sperrorlog
Name Null? Type
----------------------------------------- -------- -----------------------
USERNAME VARCHAR2(256)
TIMESTAMP TIMESTAMP(6)
SCRIPT CLOB
IDENTIFIER VARCHAR2(256)
MESSAGE CLOB
STATEMENT CLOB
SQL> selct * from dual;
SP2-0734: unknown command beginning "selct * fr..." - rest of line ignored.
SQL>
所以,上面的 SP2 错误 现在 logged 在 sperrorlog table.
SQL> select timestamp, username, statement, message from sperrorlog;
TIMESTAMP USERNAME STATEMENT MESSAGE
------------------------------ -------- -------------------- --------------------------------------------------
06-APR-15 10.42.49.000000 AM LALIT selct * from dual; SP2-0734: unknown command beginning "selct * fr...
" - rest of line ignored.
SQL>