首页 > 解决方案 > 将普通 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 子句中提到的所有列。

标签: sqldatabaseoraclestored-proceduresplsql

解决方案


首先,使用游标 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 个游标?”是什么意思。您在这里只有一个光标。但这肯定会处理你家庭作业的基础知识。

希望这可以帮助!


推荐阅读