2017-05-30 61 views
0

我声明并使用记录,动态类型和游标来计算卖家的表现。Orale cursor sql

这是我的代码:

DECLARE 

    TYPE performance_type IS RECORD 
         (person_code person.person_code%TYPE, 
    person_name  person.last_name%TYPE, 
    current_sales NUMBER (8, 2), 
    perform_percent NUMBER (8,1), 
    status  varchar2(30)) ; 
    one_perform performance_type; 
    CURSOR person_cur IS 
    SELECT * FROM persoon; 

CREATE OR REPLACE PROCEDURE current_performance 
(a_person   persoon%ROWTYPE, 
a_perform OUT performance_type) 
BEGIN 
    CURSOR history_cur (pers varchar2) IS 
     SELECT AVG(tab2.product_price * tab1.quantity) avg_order 
     FROM puurchase_archive tab1, prooduct tab2 
     WHERE tab1.product_name = tab2.product_name 
     GROUP BY tab1.salesperson 
     HAVING tab1.salesperson = pers; 
    hist_rec   history_cur%ROWTYPE; 
    current_avg_sales NUMBER(8,2) := 0; 

    a_perform.person_code := a_person.person_code; 
    a_perform.person_name := a_person.last_name; 
    a_perform.status := NULL; 
    BEGIN 
    SELECT SUM(tbl2.product_price * tbl1.quantity), 
     AVG tbl2.product_price * tbl1.quantity) 
     INTO a_perform.current_sales, 
     current_avg_sales 
     FROM puurchase tbl1, prooduct tbl2 
     WHERE tbl1.product_name = tbl2.product_name 
     GROUP BY tbl1.salesperson 
     HAVING tbl1.salesperson = a_person.person_code; 
     EXCEPTION 
     WHEN NO_DATA_FOUND 
     THEN 
      a_perform.status := 'Current purchases exception'; 
      a_perform.current_sales := 0; 
    END; 
    OPEN history_cur (a_person.person_code); 
    FETCH history_cur INTO hist_rec; 
    IF (history_cur%NOTFOUND) THEN 
     a_perform.perform_percent := 0; 
    IF (a_perform.status IS NULL) THEN 
     a_perform.status := 'Erroneous or no history'; 
    END IF; 
    ELSE 
     a_perform.perform_percent := 100 * (current_avg_sales - hist_rec.avg_order)/ 
     hist_rec.avg_order; 
     a_perform.status := 'All fine'; 
    END IF; 
    CLOSE history_cur; 
    EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
     a_perform.status := 'Exceptions found'; 
END current_performance; 

BEGIN 
FOR person_rec IN person_cur 
LOOP 
current_performance(person_rec, one_perform); 
dbms_output.put_line(one_perform.person_code || ' ' || 
one_perform.person_name  || ' ' || 
one_perform.current_sales  || ' ' || 
one_perform.perform_percent || ' ' || 
one_perform.status); 
END LOOP; 
END; 

这个代码不申报工作。 错误:在期待以下某种情况时遇到符号“CREATE”:begin函数包pragma过程子类型类型使用表单当前游标。

而且没有DECLARE我已经得到警告: [1]:在声明0,62秒处理与警告 [1]:(警告)PLS-00103:出现符号 “BEGIN” 期待的一个时如下:是使用外部确定性parallel_enable流水线的authid作为集群顺序在“BEGIN”之前插入符号“ [1] :(警告)PLS-00103:遇到下列其中一项时遇到符号”。“:constant异常表LONG_双引用字符时间时间戳间隔日期二进制国家字符nchar符号“”替代为“。”以继续 [1] :(警告)PLS-00103:遇到符号“。”以下内容:常量异常表LONG_双引用字符时间时间戳间隔日期二进制国家字符nchar符号“”替代为“。”以继续 [1] :(警告)PLS-00103:遇到符号“。”以下之一:常量异常表LONG_双引用字符时间时间戳间隔日期二进制国家字符nchar符号“”替代为“。”以继续。(警告)PLS-00103:遇到下列其中一项时遇到符号“TBL2”:(符号“(”替换为“TBL2”以继续。 (警告)PLS-00103:遇到符号“OPEN” [1] :(警告)PLS-00103:遇到下列其中一项时遇到符号“FETCH”:begin function package pragma procedure subtype type使用表格当前光标符号“开始”代替“FETCH”继续。

我的错误是什么?

我的数据库:

CREATE TABLE person ( 
person_code VARCHAR2(3) PRIMARY KEY,  
first_name VARCHAR2(15),  
last_name VARCHAR2(20),  
hire_date DATE  
); 
CREATE INDEX person_name_index  
ON person(last_name, first_name);  
ALTER TABLE person  
ADD CONSTRAINT person_unique UNIQUE ( 
first_name,  
last_name,  
hire_date  
);  
INSERT INTO person VALUES  
('CA', 'Charlene', 'Atlas', '01-ФЕВ-02'); 
INSERT INTO person VALUES  
('GA', 'Gary', 'Andersen', '15-ФЕВ-02'); 
INSERT INTO person VALUES  
('BB', 'Bobby', 'Barkenhagen', '28-ФЕВ-02');  
INSERT INTO person VALUES  
('LB', 'Laren', 'Baxter', '01-МАР-02 ');  
INSERT INTO person VALUES  
('LN', 'Linda', 'Norton', '01-ИЮН-03'); 

CREATE TABLE product (
product_name VARCHAR2(25) PRIMARY KEY, 
product_price NUMBER(4,2), 
quantity_on_hand NUMBER(5,0), 
last_stock_date DATE 
); 
ALTER TABLE product ADD (
CONSTRAINT positive_quantity CHECK(
quantity_on_hand IS NOT NULL 
AND 
quantity_on_hand >= 0) 
); 
INSERT INTO product VALUES 
('Small Widget', 99, 1, '15-ЯНВ-03'); 
INSERT INTO product VALUES 
('Medium Wodget', 75, 1000, '15-ЯНВ-02'); 
INSERT INTO product VALUES 
('Chrome Phoobar', 50, 100, '15-ЯНВ-03'); 
INSERT INTO product VALUES 
('Round Chrome Snaphoo', 25, 10000, null); 
INSERT INTO product VALUES 
('Extra Huge Mega Phoobar +', 9.95, 1234, '15-ЯНВ-04'); 
INSERT INTO product VALUES ('Square Zinculator', 
45, 1, TO_DATE ('Декабрь 31, 2002, 11:30', 
'Month dd, YYYY, HH:MI')); 
INSERT INTO product VALUES (
'Anodized Framifier', 49, 5, NULL); 
INSERT INTO product VALUES (
'Red Snaphoo', 1.95, 10, '31-ДЕК-01'); 
INSERT INTO product VALUES (
'Blue Snaphoo', 1.95, 10, '30-ДЕК-01'); 

CREATE TABLE purchase (
product_name VARCHAR2(25), 
salesperson VARCHAR2(3), 
purchase_date DATE, 
quantity NUMBER(4,2) 
); 
ALTER TABLE purchase 
ADD PRIMARY KEY (product_name, 
salesperson, 
purchase_date 
); 
ALTER TABLE purchase ADD (
CONSTRAINT reasonable_date CHECK(
purchase_date IS NOT NULL 
AND 
TO_CHAR(purchase_date, 'YYYY-MM-DD') >= '2000-06-30') 
); 
ALTER TABLE purchase 
ADD CONSTRAINT purchase_fk_product FOREIGN KEY 
(product_name) REFERENCES product; 
ALTER TABLE purchase 
ADD CONSTRAINT purchase_fk_person FOREIGN KEY 
(salesperson) REFERENCES person; 
CREATE INDEX purchase_product 
ON purchase(product_name); 
CREATE INDEX purchase_salesperson 
on purchase(salesperson); 
INSERT INTO purchase VALUES 
('Small Widget', 'CA', '14-ИЮЛ-03', 1); 
INSERT INTO purchase VALUES 
('Medium Wodget', 'BB', '14-ИЮЛ-03', 75); 
INSERT INTO purchase VALUES 
('Chrome Phoobar', 'GA', '14-ИЮЛ-03', 2); 
INSERT INTO purchase VALUES 
('Small Widget', 'GA', '15-ИЮЛ-03', 8); 
INSERT INTO purchase VALUES 
('Medium Wodget', 'LB', '15-ИЮЛ-03', 20); 
INSERT INTO purchase VALUES 
('Round Chrome Snaphoo', 'CA', '16-ИЮЛ-03', 5); 
INSERT INTO purchase VALUES 
('Small Widget', 'CA', '17-ИЮЛ-03', 1); 
CREATE TABLE purchase_archive (
product_name VARCHAR2 (25), 
salesperson VARCHAR2(3), 
purchase_date DATE, 
quantity NUMBER (4, 2) 
); 
INSERT INTO purchase_archive VALUES 
('Round Snaphoo', 'BB', '21-ИЮН-01', 10); 
INSERT INTO purchase_archive VALUES 
('Large Harflinger ' , 'GA', '22-ИЮН-01', 50); 
INSERT INTO purchase_archive VALUES 
('Medium Wodget', 'LB', '23-ИЮН-01', 20); 
INSERT INTO purchase_archive VALUES 
('Small Widget', 'ZZ', '24-ИЮН-02', 80); 
INSERT INTO purchase_archive VALUES 
('Chrome Phoobar', 'CA', '25-ИЮН-02', 2); 
INSERT INTO purchase_archive VALUES 
('Small Widget', 'JT', '26-ИЮН-02', 50); 

回答