0

私はこのエラーで立ち往生しています。以下のコードの間違いを教えてください。これは、変数の入力を受け取るプロシージャ内に記述されています。ありがとう。

execute immediate 'Create or replace view '||p_viewname||' AS  
     select * from (  
     select NAME, CODETYPE, CODE  
     from HLIDEV_VIEWS.V_CONCEPT  
     WHERE HLIDEV_VIEWS.V_CONCEPT.CONCEPTTYPE = '''||p_concepttype||'''  
    )  
    pivot   
    (  
       max(code)  
       for codetype in ('||all_codetypes||')  
    )';  

更新: 以下は、私が見ているエラーです。

EXEC "HLIDEV_VIEWS"."FinalCreatePOAView" ('POA_CONCEPT_TYPE','PresentOnAdmission')
Error report -
ORA-00911: invalid character
ORA-06512: at "HLIDEV_VIEWS.FinalCreatePOAView", line 39
ORA-06512: at line 1
00911. 00000 -  "invalid character"
*Cause:    identifiers may not start with any ASCII character other than
           letters and numbers.  $#_ are also allowed after the first
           character.  Identifiers enclosed by doublequotes may contain
           any character other than a doublequote.  Alternative quotes
           (q'#...#') cannot use spaces, tabs, or carriage returns as
           delimiters.  For all other contexts, consult the SQL Language
           Reference Manual.
*Action:
4

2 に答える 2

1

あなたがやろうとしていることは、すぐに実行を使用して完全に実行できます。どこかに構文エラーがあるか、テーブルが実際に存在しません。

作成している文字列を EXECUTE IMMEDIATE に送信するのではなく、DBMS_OUTPUT.PUT_LINE に書き込んでみてください。次に、その文字列を SQL*Plus でコマンドとして実行してみます。これにより、エラーが強調表示されます。

FWIW、データベースにあなたのオブジェクトはありませんが、あなたと同じフォームでEXECUTE IMMEDIATEを書きましたが、Oracle 11g2で正常に動作します。

DECLARE  
  p_view_name VARCHAR2(61) := 'VXSMIMMCP.MATT_V';
  p_region_code VARCHAR2(30) := 'R01';
  p_all_port_codes VARCHAR2(400) := '''P01'',''P02'',''P03''';
BEGIN
  EXECUTE IMMEDIATE
       'Create or replace view '
    || p_view_name
    || ' AS select * from ( select REGION_CODE,   account_number , port_code from APPS.XXCUS_ACCOUNTS WHERE APPS.XXCUS_ACCOUNTS.REGION_CODE  = '''
    || p_region_code
    || ''' ) pivot ( min(account_number) for port_code in ('
    || p_all_port_codes
    || ') )' ;
END;
于 2015-08-10T22:04:59.130 に答える