1

私のシェルスクリプト内のpl/sqlブロックからこの問題が発生しています。スクリプト PL/SQL BLOCK は次のとおりです。

$ORACLE_HOME/bin/sqlplus -s system/${SysPwd}@${SList} <<!
--WHENEVER SQLERROR EXIT FAILURE;
  SET SERVEROUTPUT ON SIZE UNLIMITED;
  SET FEEDBACK OFF;
  SET DEFINE OFF;
  spool ${RESULT} append
DECLARE
TABLE_MISSING EXCEPTION;
  PRAGMA EXCEPTION_INIT(TABLE_MISSING,-6550);
    err_num NUMBER;
    err_msg VARCHAR2(100);
    cnt number;
    sql_stmt varchar2(2000);
    v_user varchar2(100) := '${User}';
    p_username varchar2(100);
    p_fullname varchar2(100);
    p_account_state char(2);

BEGIN
  select count(*) into cnt from users where upper(full_name) like '%${PaceUser}%';
  if cnt <> 0 then
  select rtrim(username),rtrim(full_name),account_state into p_username,p_fullname,p_account_state from users where upper(full_name) like '%${User}';
   dbms_output.put_line('User ${User} exist in the database ${SList}.....');
  end if;
EXCEPTION
  when NO_DATA_FOUND then
  NULL;
  WHEN TABLE_MISSING
      THEN
        NULL;
  WHEN OTHERS THEN
         NULL;
END;
/

そしてエラー:

ERROR:


   select count(*) into cnt from users where upper(full_name) like '%TYLER MACHUTCHON%';
                                      *
ERROR at line 16:
ORA-06550: line 16, column 48:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 16, column 3:
PL/SQL: SQL Statement ignored
ORA-06550: line 18, column 120:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 18, column 3:
PL/SQL: SQL Statement ignored

アイデアや提案はありますか?

4

1 に答える 1

0
  WHEN TABLE_MISSING
      THEN
        NULL;

呼び出し元に発生させてプロセスを失敗させる必要があるエラーのように見えます。「テーブルがありません」は無視したいエラーではありません。

  WHEN OTHERS THEN
         NULL;

あなたのプロセスに意味がなく、それが機能するかどうか誰も気にしない限り、もう一つの本当に悪いことです。

================================================== ===============================

実際の修正に関しては、実行時にテーブルが存在する場合と存在しない場合がある場合は、動的SQLを使用してすべての操作を実行する必要があります。存在するかどうかを確認するには、データディクショナリビュー(user_tables、all_tables、またはdba_tables)を使用できます。

于 2012-09-17T21:45:43.283 に答える