PLSQL遇到了符号“quot;是”;当预期以下情况之一时

PLSQL遇到了符号“quot;是”;当预期以下情况之一时,plsql,Plsql,嗨,我正在尝试使用PLSQL创建一个汇总统计表。我是PLSQL的新手。我一直在犯这个错误。 预期出现下列情况之一时遇到符号“是” 下面是我的代码 DECLARE AGE NUMBER; CAMPAIGN NUMBER; PDAYS NUMBER; PREVIOUS NUMBER; POUTCOME NUMBER; EMP_VAR_RATE NUMBER; CONS_PRICE_IDX NUMBER; CONS_CONF_IDX NUMBER; EURIBOR3M NUMBER; Y VARCHA

嗨,我正在尝试使用PLSQL创建一个汇总统计表。我是PLSQL的新手。我一直在犯这个错误。 预期出现下列情况之一时遇到符号“是”

下面是我的代码

DECLARE
AGE NUMBER;
CAMPAIGN NUMBER;
PDAYS NUMBER;
PREVIOUS NUMBER;
POUTCOME NUMBER;
EMP_VAR_RATE NUMBER;
CONS_PRICE_IDX NUMBER;
CONS_CONF_IDX NUMBER;
EURIBOR3M NUMBER;
Y VARCHAR;


BEGIN
 EXECUTE IMMEDIATE ('
CREATE TABLE SUMMARY_STAT
AS

SELECT 
ROUND(AVG(AGE)) AS AVERAGE_AGE
,ROUND(AVG(CAMPAIGN)) AS AVERAGE_CONTACTS_MADE
,ROUND(AVG(PDAYS)) AS NO_DAYS_PASSED
,ROUND(AVG(PREVIOUS)) AS AVERAGE_PREVIOUS_CONTACTS_MADE
,ROUND(AVG(EMP_VAR_RATE)) AS AVERAGE_EMPLOYEE_VARIATION
,ROUND(AVG(CONS_PRICE_IDX)) AS AVERAGE_CONSUMER_PRICE_INDEX
,ROUND(AVG(CONS_CONF_IDX)) AS AVERAGE_CONSUMER_CONFIDENCE_INDEX
,ROUND(AVG(EURIBOR3M)) AS AVERAGE_EURIBOR
,COUNT(CASE WHEN Y = 'yes' THEN 1 end) AS NUMBER_CUSTOMERS_TOOK_DEPOSIT
,COUNT(CASE WHEN Y = 'no' THEN 1 end) AS NUMBER_CUSTOMERS_DIDNT_TAKE_DEPOSIT

FROM BANK_DATA
');

END;

问题是在较大的字符串中有单引号。不幸的是,从解释器的角度来看,您的字符串处于“创建…”。。。当Y='是一个字符串,下一个标记是解释器不理解的单词“yes”
您有两种选择:

  • 将较大字符串中所需的引号加倍
  • 使用替代方案
  • 使用引号分隔符可以得到:

    BEGIN
     EXECUTE IMMEDIATE (q'[
    CREATE TABLE SUMMARY_STAT
    AS
    
    SELECT 
    ROUND(AVG(AGE)) AS AVERAGE_AGE
    ,ROUND(AVG(CAMPAIGN)) AS AVERAGE_CONTACTS_MADE
    ,ROUND(AVG(PDAYS)) AS NO_DAYS_PASSED
    ,ROUND(AVG(PREVIOUS)) AS AVERAGE_PREVIOUS_CONTACTS_MADE
    ,ROUND(AVG(EMP_VAR_RATE)) AS AVERAGE_EMPLOYEE_VARIATION
    ,ROUND(AVG(CONS_PRICE_IDX)) AS AVERAGE_CONSUMER_PRICE_INDEX
    ,ROUND(AVG(CONS_CONF_IDX)) AS AVERAGE_CONSUMER_CONFIDENCE_INDEX
    ,ROUND(AVG(EURIBOR3M)) AS AVERAGE_EURIBOR
    ,COUNT(CASE WHEN Y = 'yes' THEN 1 end) AS NUMBER_CUSTOMERS_TOOK_DEPOSIT
    ,COUNT(CASE WHEN Y = 'no' THEN 1 end) AS NUMBER_CUSTOMERS_DIDNT_TAKE_DEPOSIT
    FROM BANK_DATA
    ]');
    
    END; 
    

    问题是在较大的字符串中有单引号。不幸的是,从解释器的角度来看,您的字符串处于“创建…”。。。当Y='是一个字符串,下一个标记是解释器不理解的单词“yes”
    您有两种选择:

  • 将较大字符串中所需的引号加倍
  • 使用替代方案
  • 使用引号分隔符可以得到:

    BEGIN
     EXECUTE IMMEDIATE (q'[
    CREATE TABLE SUMMARY_STAT
    AS
    
    SELECT 
    ROUND(AVG(AGE)) AS AVERAGE_AGE
    ,ROUND(AVG(CAMPAIGN)) AS AVERAGE_CONTACTS_MADE
    ,ROUND(AVG(PDAYS)) AS NO_DAYS_PASSED
    ,ROUND(AVG(PREVIOUS)) AS AVERAGE_PREVIOUS_CONTACTS_MADE
    ,ROUND(AVG(EMP_VAR_RATE)) AS AVERAGE_EMPLOYEE_VARIATION
    ,ROUND(AVG(CONS_PRICE_IDX)) AS AVERAGE_CONSUMER_PRICE_INDEX
    ,ROUND(AVG(CONS_CONF_IDX)) AS AVERAGE_CONSUMER_CONFIDENCE_INDEX
    ,ROUND(AVG(EURIBOR3M)) AS AVERAGE_EURIBOR
    ,COUNT(CASE WHEN Y = 'yes' THEN 1 end) AS NUMBER_CUSTOMERS_TOOK_DEPOSIT
    ,COUNT(CASE WHEN Y = 'no' THEN 1 end) AS NUMBER_CUSTOMERS_DIDNT_TAKE_DEPOSIT
    FROM BANK_DATA
    ]');
    
    END;