sql - 将普通 SQL 查询转换为 PL/SQL 过程 (Oracle)
问题描述
我有一个家庭作业,我必须将一些 sql 查询转换为 PL/SQL 中的过程。我从第一个开始,这里是查询:
select product.name, product.year, product.single_price,performer.name, genre.style, typep.label,company.name
from product
join genre
on product.genre_genreid = genre.genreid
join performer
on product.performer_performerid = performer.performerid
join typep
on product.type_type_id = typep.type_id
join company
on product.companyid = company.companyid
where genre.style like '&Genre' and (product.type_type_id = 1 or product.type_type_id =3);
它与其他表有多个连接。这里的问题是我对 PL-SQL 语言不太熟悉,我想要的是创建一个带有 1 个参数的过程,它将替换where
子句中的变量。dbms_output_line()
该过程将使用命令返回所有必需的变量(列) 。但是我只能在 1 个游标中有一个变量。我的问题是如何修改程序,使其返回 select 子句中提到的所有列。
解决方案
首先,使用游标 FOR 循环。然后您不必声明变量、编写 open 和 fetch 语句等。
CREATE PROCEDURE searchgenre (genre_input_in IN VARCHAR2)
IS
BEGIN
FOR rec
IN (SELECT product.name --, product.year, product.single_price,performer.name, genre.style, typep.label,company.name
FROM product
JOIN genre ON product.genre_genreid = genre.genreid
JOIN performer
ON product.performer_performerid = performer.performerid
JOIN typep ON product.type_type_id = typep.type_id
JOIN company ON product.companyid = company.companyid
WHERE genre.style LIKE genre_input_in
AND (product.type_type_id = 1 OR product.type_type_id = 3))
LOOP
dbms_output_line (rec.product_name);
END LOOP;
END;
我不确定“如何加入 2 个游标?”是什么意思。您在这里只有一个光标。但这肯定会处理你家庭作业的基础知识。
希望这可以帮助!
推荐阅读
- javascript - Bot not replying correctly in a private message
- javascript - 问题自动滚动页面
- php - 在 laravel 控制器中获取动态输入字段
- ruby-on-rails - 有没有一种方法可以为每个项目的 rails 控制台使用 awesome_print gem 而无需添加到 Gemfile
- python-3.x - How to translate deprecated tf.train.QueueRunners tensorflow approach to importing data to new tf.data.Dataset approach
- python - 在 mac 上安装 caffe “错误:无效选项:--with-python”
- kdb - 查询列表中百分位数的有效方法
- c# - How to write these particular lines in MVVM WPF(c#)?
- openedge - 如何将 Openedge 连接到水晶报表
- python-3.x - ffmpeg trim mp3 - 精确确定要修剪部分的开始和结束时间