执行算术时忽略SQL语句
我一直在尝试PL/SQL中的一些算法。然而,当对数组的两个元素进行加法、乘法等运算时,我遇到了一个问题 我的目标是效率、薪水、现金。所有这些都由四个元素组成。我有以下问题。每当我以下面的方式划分这两个元素时执行算术时忽略SQL语句,sql,oracle,Sql,Oracle,我一直在尝试PL/SQL中的一些算法。然而,当对数组的两个元素进行加法、乘法等运算时,我遇到了一个问题 我的目标是效率、薪水、现金。所有这些都由四个元素组成。我有以下问题。每当我以下面的方式划分这两个元素时 EFFICIENCY(2):=SALARIES(2)/CASH(2); 我得到一个被忽略的SQL语句错误。为什么会发生这种情况 附言:我在循环中划分元素,即,效率(I):=工资(I)/现金(I) 我发布了全部源代码: CREATE OR REPLACE PROCEDURE ANAL
EFFICIENCY(2):=SALARIES(2)/CASH(2);
我得到一个被忽略的SQL语句错误
。为什么会发生这种情况
附言:我在循环中划分元素,即,效率(I):=工资(I)/现金(I)代码>
我发布了全部源代码:
CREATE OR REPLACE PROCEDURE ANALYSIS
IS
CURSOR EMPLOYEES IS
SELECT * FROM EMPLOYEE;
CURSOR BILLS IS
SELECT * FROM BILL;
WORKER EMPLOYEE%ROWTYPE;
CASH BILL%ROWTYPE;
TYPE SALARY IS VARRAY(4) OF NUMBER(6,2);
SALARIES SALARY:=SALARY(0,0,0,0);
AMOUNTS SALARY:=SALARY(0,0,0,0);
EFFICIENCY SALARY:=SALARY(0,0,0,0);
BEGIN
OPEN EMPLOYEES;
OPEN BILLS;
LOOP
FETCH EMPLOYEES INTO WORKER;
EXIT WHEN EMPLOYEES%NOTFOUND;
IF WORKER.BRANCHID=1 THEN
SALARIES(1):=SALARIES(1)+WORKER.SALARY;
ELSIF WORKER.BRANCHID=2 THEN
SALARIES(2):=SALARIES(2)+WORKER.SALARY;
ELSIF WORKER.BRANCHID=3 THEN
SALARIES(3):=SALARIES(3)+WORKER.SALARY;
ELSIF WORKER.BRANCHID=4 THEN
SALARIES(4):=SALARIES(4)+WORKER.SALARY;
END IF;
END LOOP;
LOOP
FETCH BILLS INTO CASH;
EXIT WHEN BILLS%NOTFOUND;
IF CASH.BRANCHID=1 THEN
AMOUNTS(1):=AMOUNTS(1)+CASH.AMOUNT;
ELSIF CASH.BRANCHID=2 THEN
AMOUNTS(2):=AMOUNTS(2)+CASH.AMOUNT;
ELSIF CASH.BRANCHID=3 THEN
AMOUNTS(3):=AMOUNTS(3)+CASH.AMOUNT;
ELSIF CASH.BRANCHID=4 THEN
AMOUNTS(4):=AMOUNTS(4)+CASH.AMOUNT;
END IF;
END LOOP;
FOR I IN 1..4 LOOP
EFFICIENCY(I):=SALARIES(I)/CASH(I);
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
END;
您正在使用现金,就好像它是一个数组:
EFFICIENCY(I):=SALARIES(I)/CASH(I);
但它不是一个数组:
CASH BILL%ROWTYPE;
所以你得到:
LINE/COL ERROR
-------- -----------------------------------------------------------------
43/3 PL/SQL: Statement ignored
43/30 PLS-00222: no function with name 'CASH' exists in this scope
我不知道您为什么只看到第一条错误消息?您在使用现金,就好像它是一个数组:
EFFICIENCY(I):=SALARIES(I)/CASH(I);
但它不是一个数组:
CASH BILL%ROWTYPE;
所以你得到:
LINE/COL ERROR
-------- -----------------------------------------------------------------
43/3 PL/SQL: Statement ignored
43/30 PLS-00222: no function with name 'CASH' exists in this scope
我不知道您为什么只看到第一条错误消息?您在使用现金,就好像它是一个数组:
EFFICIENCY(I):=SALARIES(I)/CASH(I);
但它不是一个数组:
CASH BILL%ROWTYPE;
所以你得到:
LINE/COL ERROR
-------- -----------------------------------------------------------------
43/3 PL/SQL: Statement ignored
43/30 PLS-00222: no function with name 'CASH' exists in this scope
我不知道您为什么只看到第一条错误消息?您在使用现金,就好像它是一个数组:
EFFICIENCY(I):=SALARIES(I)/CASH(I);
但它不是一个数组:
CASH BILL%ROWTYPE;
所以你得到:
LINE/COL ERROR
-------- -----------------------------------------------------------------
43/3 PL/SQL: Statement ignored
43/30 PLS-00222: no function with name 'CASH' exists in this scope
我不知道您为什么只看到第一条错误消息?您应该看到一条PLS-00222:此范围内不存在名为“CASH”的函数
错误
CASH
被定义为BILL%ROWTYPE
,而不是数组,因此您不能在算术中引用CASH(I)
。我不确定你打算做什么,所以不清楚该如何修改,但从总体来看,我认为你的意思是指金额
:
EFFICIENCY(2):=SALARIES(2)/AMOUNTS(2);
您应该看到一个PLS-00222:此范围内不存在名为“CASH”的函数
错误
CASH
被定义为BILL%ROWTYPE
,而不是数组,因此您不能在算术中引用CASH(I)
。我不确定你打算做什么,所以不清楚该如何修改,但从总体来看,我认为你的意思是指金额
:
EFFICIENCY(2):=SALARIES(2)/AMOUNTS(2);
您应该看到一个PLS-00222:此范围内不存在名为“CASH”的函数
错误
CASH
被定义为BILL%ROWTYPE
,而不是数组,因此您不能在算术中引用CASH(I)
。我不确定你打算做什么,所以不清楚该如何修改,但从总体来看,我认为你的意思是指金额
:
EFFICIENCY(2):=SALARIES(2)/AMOUNTS(2);
您应该看到一个PLS-00222:此范围内不存在名为“CASH”的函数
错误
CASH
被定义为BILL%ROWTYPE
,而不是数组,因此您不能在算术中引用CASH(I)
。我不确定你打算做什么,所以不清楚该如何修改,但从总体来看,我认为你的意思是指金额
:
EFFICIENCY(2):=SALARIES(2)/AMOUNTS(2);
你能不能发布一个简单完整的示例,说明你运行的代码中出现的错误?好的,我会的。但是我的代码不是很好,所以我避免发布它。我将编辑并发布它。“SQL语句被忽略”通常只是几个相关错误消息中的一条,前面的错误消息将说明实际错误;那么,你能将整个错误堆栈和代码一起添加到问题中吗?错误堆栈只有这么多。没别的了。事实上,如果我删除算术语句,我的代码就能完美编译。。。ELSIF
只需使用工资(WORKER.BRANCHID):=工资(WORKER.BRANCHID)+WORKER.SALARY代码>例如,您可以发布一个简单、完整的示例,说明您运行的导致错误的代码吗?好的,我会的。但是我的代码不是很好,所以我避免发布它。我将编辑并发布它。“SQL语句被忽略”通常只是几个相关错误消息中的一条,前面的错误消息将说明实际错误;那么,你能将整个错误堆栈和代码一起添加到问题中吗?错误堆栈只有这么多。没别的了。事实上,如果我删除算术语句,我的代码就能完美编译。。。ELSIF
只需使用工资(WORKER.BRANCHID):=工资(WORKER.BRANCHID)+WORKER.SALARY代码>例如,您可以发布一个简单、完整的示例,说明您运行的导致错误的代码吗?好的,我会的。但是我的代码不是很好,所以我避免发布它。我将编辑并发布它。“SQL语句被忽略”通常只是几个相关错误消息中的一条,前面的错误消息将说明实际错误;那么,你能将整个错误堆栈和代码一起添加到问题中吗?错误堆栈只有这么多。没别的了。事实上,如果我删除算术语句,我的代码就能完美编译。。。ELSIF
只需使用工资(WORKER.BRANCHID):=工资(WORKER.BRANCHID)+WORKER.SALARY代码>例如,您可以发布一个简单、完整的示例,说明您运行的导致错误的代码吗?好的,我会的。但是我的代码不是很好,所以我避免发布它。我将编辑并发布它。“SQL语句被忽略”通常只是几个相关错误消息中的一条,前面的错误消息将说明实际错误;那么,你能将整个错误堆栈和代码一起添加到问题中吗?错误堆栈只有这么多。没别的了。事实上,如果我删除算术语句,我的代码就能完美编译。。。ELSIF
只需使用工资(WORKER.BRANCHID):=工资(WORKER.BRANCHID)+WORKER.SALARY代码>例如,即使我不知道。它只是说SQL语句被忽略了。我正在使用Oracle11g。也许这与此有关连我也不知道。它只是说SQL语句被忽略了。我正在使用Oracle11g。也许这与此有关连我也不知道。它只是说SQL语句被忽略了。我正在使用Oracle11g。也许这与此有关连我都不知道