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

您正在尝试做的是使用立即执行完全可行。您只是在某处出现语法错误,或者该表确实不存在。

尝试将您正在构建的字符串写入 DBMS_OUTPUT.PUT_LINE,而不是将其发送到 EXECUTE IMMEDIATE。然后,尝试在 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 回答
0

感谢@MatthewMcPeak 和@MahendarMahi 的投入。突然间,我的代码开始正常工作,并以我想要的方式创建了视图。正如@MahendarMahi 建议的那样,我唯一做的就是删除了pivot 并运行它以查看相同的错误,然后替换pivot 并且错误消失了。我确信代码没有变化,但无论如何它现在很奇怪。再次感谢您的宝贵时间。

于 2015-08-11T04:40:24.050 回答