Database 编写将填充结果表的PL/SQL块,如下所述:

Database 编写将填充结果表的PL/SQL块,如下所述:,database,oracle,performance,plsql,Database,Oracle,Performance,Plsql,我需要在结果表中插入每个客户id和 该客户购买的独特产品。其次,如果客户在过去12个月内购买了产品,我需要将“最近购买”列更新为“是”,如果客户在过去12个月内没有购买产品,则更新为“N” 下面列出了表格和定义: table: CUSTOMER columns: customer_id NUMBER, customer_name VARCHAR2(100), recently_purchased VARCHAR2(1) -- 'Y' or 'N' table: CUST_PRODUCTS co

我需要在结果表中插入每个客户id和 该客户购买的独特产品。其次,如果客户在过去12个月内购买了产品,我需要将“最近购买”列更新为“是”,如果客户在过去12个月内没有购买产品,则更新为“N”

下面列出了表格和定义:

table: CUSTOMER
columns: customer_id NUMBER, customer_name VARCHAR2(100), recently_purchased VARCHAR2(1) -- 'Y' or 'N'

table: CUST_PRODUCTS
columns: product_id NUMBER, customer_id NUMBER, date_purchased DATE

table: RESULTS
columns: customer_id NUMBER, product_count NUMBER

table: PRODUCTS
column: product_id NUMBER, product_name VARCHAR2(100)
这就是我想到的:

DECLARE

GET_DATE DATE;

BEGIN

INSERT INTO RESULTS (customer_id, product_count)
SELECT c.customer_id, (select count(product_id) 
                    from CUST_PRODUCTS p 
                    where p.customer_id = c.customer_id)
FROM CUST_PRODUCTS c);

SELECT  date_purchased 
INTO  GET_DATE
FROM CUST_PRODUCTS;
IF GET_DATE < SYSDATE - 365
    UPDATE customer
    SET recently_purchased =  "Y";
ELSE 
    UPDATE customer
    SET recently_purchased =  "N";
END IF;  
END

请帮我核实一下。我没有任何数据库软件来测试我的代码。谢谢

我试过了,你可以在上面验证一下。我收到ORA-00922:缺少或选项无效。您缺少在if语句之前终止select的分号。也错过了结局;终止declare块。还缺少分号来终止这两个update语句。为什么您的客户id>0?您是否希望客户ID为非正或空?您的问题陈述也不完整:结果表是否也应包含尚未购买任何产品的客户?我建议您从oracle.com下载并安装oracle DB,例如11g EE,它是免费的,用于开发培训。否则,不编译代码就开发和调试代码是很奇怪的。除了@Vadim K提到的事情外,第一个括号中还有奇数个括号statement@VadimK. 我做了你建议的改变。仍然没有在sqlfiddle.com上验证。请看这里:
    DECLARE
        GET_DATE DATE;
        GET_ID Number;  

    CURSOR c1
       IS
         SELECT date_purchased, customer_id
         FROM CUST_PRODUCTS
         WHERE date_purchased < SYSDATE;

    BEGIN
        INSERT INTO RESULTS (customer_id, product_count)
        SELECT c.customer_id,(SELECT count(DISTINCT P.product_id) 
        FROM CUST_PRODUCTS P
        WHERE P.customer_id = C.customer_id)
        FROM CUSTOMER C;

        OPEN c1;
        LOOP
         FETCH c1 INTO GET_DATE, GET_ID;
         IF GET_DATE > SYSDATE-365 THEN
            UPDATE CUSTOMER
            SET recently_purchased =  'Y'
            WHERE customer_id = GET_ID;
       ELSE
          UPDATE CUSTOMER
            SET recently_purchased =  'N'
            WHERE customer_id = GET_ID;

       END IF;
         EXIT WHEN c1%NOTFOUND;
        END LOOP;   

       CLOSE c1;

    END;
    //