首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLS-00103:遇到符号",“

PLS-00103:遇到符号",“
EN

Stack Overflow用户
提问于 2013-03-21 18:36:57
回答 3查看 12K关注 0票数 1

此过程出现以下错误。

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE SAMPLE
IS
BEGIN
EXECUTE IMMEDIATE
    'CREATE TABLE COLUMN_NAMES AS (
     SELECT LISTAGG(COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_NAME) AS STUDENTS
     FROM   
         (SELECT DISTINCT COLUMN_NAME
          FROM BW_COLUMN_ROW_CELL_JOIN)
     )';
END;
/

提供:

代码语言:javascript
复制
PLS-00103: Encountered the symbol "," when expecting one of the following:     
* & = - + ; < / > at in is mod remainder not rem return    
returning <an exponent (**)> <> or != or ~= >= <= <> and or   
like like2 like4 likec between into using || multiset bulk    member submultiset 

有人能说出这里面出了什么问题吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-22 14:42:47

另一种方法(在Oracle10g和更高版本中)是使用替代的字符串文字表示法-这意味着您不需要担心正确转义字符串中的所有单引号,例如q'{my string's got embedded quotes}'

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE SAMPLE
IS
BEGIN
EXECUTE IMMEDIATE q'[
     CREATE TABLE COLUMN_NAMES AS (
     SELECT LISTAGG(COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_NAME) AS STUDENTS
     FROM   
         (SELECT DISTINCT COLUMN_NAME
          FROM BW_COLUMN_ROW_CELL_JOIN)
     )]';
END;
/
票数 3
EN

Stack Overflow用户

发布于 2013-03-21 18:48:50

我认为问题是你在单引号中有单引号。我现在不能测试这一点,但我建议您尝试以下方法(请注意,内部引号是双引号'',它对它们进行转义:

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE SAMPLE 
IS
BEGIN 
    EXECUTE IMMEDIATE 'CREATE TABLE COLUMN_NAMES AS ( SELECT LISTAGG(COLUMN_NAME, '','') WITHIN GROUP (ORDER BY COLUMN_NAME) AS STUDENTS FROM (SELECT DISTINCT COLUMN_NAME FROM BW_COLUMN_ROW_CELL_JOIN) )'; 
END; 
/

我还会先尝试代码的create table部分,以确保在将其包装到proc之前是有效的。

票数 1
EN

Stack Overflow用户

发布于 2013-03-21 19:02:01

您不能在Execute Immediateselect statement中直接使用single quotes,需要使用CHR(39)进行编码

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE SAMPLE
IS
BEGIN
   EXECUTE IMMEDIATE
     'CREATE TABLE COLUMN_NAMES AS (
             SELECT LISTAGG(COLUMN_NAME,'||chr(39)||','||chr(39)||') WITHIN GROUP (ORDER BY COLUMN_NAME) AS STUDENTS
             FROM   
            (SELECT DISTINCT COLUMN_NAME FROM BW_COLUMN_ROW_CELL_JOIN))';
END;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15545123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档