Plsql PL/SQL如何从循环中的查询进行迭代和更新
我不知道如何从循环中的查询结果进行迭代和更新。可以从我的第一个循环中的查询再次循环吗?这是我的密码:Plsql PL/SQL如何从循环中的查询进行迭代和更新,plsql,Plsql,我不知道如何从循环中的查询结果进行迭代和更新。可以从我的第一个循环中的查询再次循环吗?这是我的密码: CREATE OR REPLACE PROCEDURE "myTEST" (sp_type in char) IS CURSOR c1 IS SELECT SP_ID FROM CI_SP WHERE SP_TYPE_CD = sp_type; sp_id char(10); item_id_eq CI_SP_EQ.ITEM_ID_EQ%type; BE
CREATE OR REPLACE PROCEDURE "myTEST" (sp_type in char)
IS
CURSOR c1 IS
SELECT SP_ID FROM CI_SP
WHERE SP_TYPE_CD = sp_type;
sp_id char(10);
item_id_eq CI_SP_EQ.ITEM_ID_EQ%type;
BEGIN
FOR sp_rec in c1
LOOP
DBMS_OUTPUT.PUT_LINE(sp_rec.sp_id);
SELECT ITEM_ID_EQ INTO item_id_eq FROM CI_SP_EQ
WHERE SP_ID = sp_rec.sp_id;
DBMS_OUTPUT.PUT_LINE('item id eq :' || item_id_eq);
-- iterate here for each item_id_eq
-- execute update for each item_id_eq also
END LOOP;
END myTEST;
您可以在
CI_SP
和CI_SP_EQ
之间进行连接,而不是循环两次,然后一次性完成:
CREATE OR REPLACE PROCEDURE "myTEST"(sp_type IN CHAR) IS
BEGIN
FOR item IN (SELECT item_id_eq
FROM ci_sp_eq JOIN ci_sp USING (sp_id)
WHERE sp_type_cd = sp_type) LOOP
-- do your stuff.
NULL;
END LOOP;
END mytest;
我认为您甚至不需要PL/SQL块,只需要一个简单的更新就可以了,但我不知道您到底想做什么
其他一些评论:
- 不要创建包含在“引号”中的对象,对象名称现在区分大小写。在您的情况下,编译将失败,因为您已将过程名称创建为“myTEST”,并以myTEST结束,Oracle将其视为“myTEST”,您将由于语法检查失败而获得编译错误
- 使用VARCHAR2代替CHAR,如果输入与长度说明符不匹配,CHAR将填充空格,并将导致进一步的问题