首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL -在声明游标时出现其他游标填充的表时出错

PL/SQL -在声明游标时出现其他游标填充的表时出错
EN

Stack Overflow用户
提问于 2020-06-26 13:03:16
回答 2查看 70关注 0票数 0

在尝试创建一个使用调用其他两个游标后填充的表的游标时,Oracle引发了ORA-00942异常表或视图不存在。我试着初始化表,但是它没有改变任何东西.

其想法是从一个表中恢复买入价格( tsc.achvte='A)和卖出价格( tsc.achvte='V'),将结果存储在两个不同的表中,并在最后将它们连接起来。

有人有什么建议吗?也许是一种更简单、更有效的方法?

提前感谢!

代码语言:javascript
复制
DECLARE

CURSOR cursorA IS
    SELECT pro.codpro as CodeProduit,
            pro.nompro as NomProduit,
            tsc.prxtar as PrixAchat
    FROM pro
    INNER JOIN tsc ON pro.codpro=tsc.codpro
    WHERE tsc.achvte='A';
TYPE tableA IS TABLE OF cursorA%ROWTYPE;
tabA tableA:=tableA();

CURSOR cursorV IS
    SELECT pro.codpro as CodeProduit,
            pro.nompro as NomProduit,
            tsc.prxtar as PrixVente
    FROM pro
    INNER JOIN tsc ON pro.codpro=tsc.codpro
    WHERE tsc.achvte='V';
TYPE tableV IS TABLE OF cursorV%ROWTYPE;
tabV tableV:=tableV();

CURSOR cursorAV IS
    SELECT tabA.CodeProduit,
            tabA.NomProduit,
            tabA.PrixAchat,
            tabV.PrixVente
    FROM tabA
    INNER JOIN tabV ON tabA.CodeProduit=tabV.CodeProduit;
                   -- AND tabA.NomProduit=tabB.NomProduit;
TYPE tableAV IS TABLE OF cursorAV%ROWTYPE;
tableauDesPrix tableAV:=tableAV();

BEGIN
OPEN cursorA;
FETCH cursorA BULK COLLECT INTO tabA;
CLOSE cursorA;

OPEN cursorV;
FETCH cursorV BULK COLLECT INTO tabV;
CLOSE cursorV;

OPEN cursorAV;
FETCH cursorAV BULK COLLECT INTO tableauDesPrix;
CLOSE cursorAV;

END;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-26 13:33:20

“有人有什么建议吗?也许是一种更简单、更有效的方法?”

为什么不写两次加入PRO到TSC的SELECT语句呢?

代码语言:javascript
复制
SELECT pro.codpro  as CodeProduit,
       pro.nompro  as NomProduit,
       tsca.prxtar as PrixAchat,
       tscv.prxtar as PrixVente
FROM       pro
INNER JOIN tsc tsca ON pro.codpro = tsca.codpro
INNER JOIN tsc tscv ON pro.codpro = tscv.codpro
WHERE tsca.achvte = 'A'
AND   tscv.achvte = 'V';

SQL被优化为联接。只要有可能,在普通的旧SQL中做任何事情都是更有效的。(在某些情况下,我们可以选择在PL/SQL中做一些事情,尽管我们可以在SQL中这样做,但在这里不行。)

票数 0
EN

Stack Overflow用户

发布于 2020-06-26 13:31:09

不能将游标名称用作上一个游标(cursorAV)中的表名。

但是,我认为您可以使用以下单个查询来实现这一点:

代码语言:javascript
复制
SELECT PRO.CODPRO    AS CODEPRODUIT,
       PRO.NOMPRO,
       TSCA.PRXTAR   AS PRIXACHAT,
       TSCV.PRXTAR   AS PRIXVENTE
  FROM PRO
 INNER JOIN TSCA
ON PRO.CODPRO = TSCA.CODPRO
 INNER JOIN TSCV
ON PRO.CODPRO = TSCV.CODPRO
 WHERE TSCA.ACHVTE = 'A'
   AND TSCV.ACHVTE = 'V';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62595340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档