我在PL/SQL的新手,我有下面的代碼的問題:得到錯誤的PL/SQL的Oracle
ALTER TRIGGER secure_employees DISABLE;
ALTER TABLE employees (ADD (exceed_avgsal VARCHAR2(3) DEFAULT 'NO'
CONSTRAINT employees_exceed_avgsal_ck CHECK (exceed_avgsal IN ('YES', 'NO')));
CREATE OR REPLACE PROCEDURE check_avgsal IS
avgsal_exceeded employees.exceed_avgsal%type;
CURSOR emp_csr IS
SELECT employee_id, job_id, salary FROM employees FOR UPDATE;
e_resource_busy EXCEPTION;
PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
FUNCTION get_job_avgsal(jobid VARCHAR2) RETURN NUMBER IS
avg_sal employees.salary%type;
BEGIN
SELECT (max_salary + min_salary)/2
INTO avg_sal
FROM jobs
WHERE job_id = jobid;
RETURN avg_sal;
END;
BEGIN
FOR emprec IN emp_csr LOOP
avgsal_exceeded := 'NO';
IF emprec.salary >= get_job_avgsal(emprec.job_id) THEN
avgsal_exceeded := 'YES';
END IF;
UPDATE employees
SET exceed_avgsal = avgsal_exceeded
WHERE CURRENT OF emp_csr;
END LOOP;
EXCEPTION
WHEN e_resource_busy THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20001, 'Record is busy, try later.');
END check_avgsal;
EXECUTE check_avgsal
SELECT e.employee_id, e.job_id, (j.max_salary-j.min_salary/2) job_avgsal, e.salary, e.exceed_avgsal avg_exceeded
FROM employees e, jobs j WHERE e.job_id = j.job_id and e.exceed_avgsal = 'YES';
COMMIT;
我得到錯誤信息
PROCEDURE CHECK_AVGSAL compiled
Errors: check compiler log
如果有人可以幫助我,我會感激
又是什麼**的編譯器日誌**說什麼? – peterm
你得到的錯誤只是一個編譯器消息,說有錯誤。你必須做一個'SELECT * FROM user_errors WHERE name ='CHECK_AVGSAL''來查看實際的錯誤。請在這裏發佈這些。 – Rachcha
錯誤(36,1):PLS-00103:遇到符號「EXECUTE」 – pecabum