我正在尝试帮助我的朋友完成 Oracle 作业,但他遇到了以下问题:
如果博客 id 小于 4,则使用游标 FOR 循环检索博客 id、博客 url 和博客描述,并将其放入游标变量中。获取并处理每条记录,并在表日志中为返回的每个博客 ID 插入一行。
我们发现很难理解,但我们有疑问:
DECLARE
CURSOR blog_cursor IS SELECT * FROM blog;
BEGIN
FOR blog_item IN blog_cursor LOOP
IF( blog_item.blog_id > 4 ) THEN
-- Insert a row in the "table log"
INSERT INTO log( log_id, log_url, log_desc )
VALUES( blog_item.blog_id, blog_item.blog_url, blog_item.blog_desc );
END IF;
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)
桌子:
blog
blog_id
blog_url
blog_desc
Run Code Online (Sandbox Code Playgroud)
该查询完成了这项工作,但它没有使用 FETCH 关键字,因此我们认为它在技术上不正确。这个问题看起来写得不好,但是你如何使用 FETCH 关键字回答它?我是 PL/SQL 新手,但我有 SQL 经验。
你做对了,你不需要获取,事实上你做了获取,但你隐式地做了,要使用关键字,你fetch需要一个record类型,你还需要打开和关闭游标,并检查是否是它打开与否,并检查它是否有行(在循环中),以下是另一个使用 fetch 和记录类型的游标:
DECLARE
CURSOR blog_cursor IS SELECT * FROM blog;
blog_item blog%rowtype;
BEGIN
OPEN blog_cursor;
LOOP
FETCH blog_cursor INTO blog_item;
EXIT WHEN blog_cursor%NOTFOUND;
IF( blog_item.blog_id > 4 ) THEN
-- Insert a row in the "table log"
INSERT INTO log( log_id, log_url, log_desc )
VALUES( blog_item.blog_id, blog_item.blog_url, blog_item.blog_desc );
END IF;
END LOOP;
CLOSE blog_cursor;
END;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43275 次 |
| 最近记录: |