我想提一下,我是新用的sql开发人员,我试图填充一个临时表,其中包含两个变量中找到的两个值,但我无法正确使用它。我希望也许你们中的一个人能有更好的主意。 这就是我尝试过的:
DECLARE
x NUMBER;
y NUMBER;
BEGIN
EXEC SELECT COUNT(*) INTO :x FROM (select * from view2 where restituita=1);
EXEC SELECT COUNT(*) INTO :y FROM (select * from view2 where restituita=0);
create global temporary table dateRest (rest number,nerest number);
insert into dateRest values(x,y);
select * from dateRest;
END;
答案 0 :(得分:3)
根据最终结果,查询过于复杂 - 只需要:
SELECT SUM(CASE WHEN restituita = 1 THEN 1 ELSE 0 END),
SUM(CASE WHEN restituita = 0 THEN 1 ELSE 0 END)
FROM view2;
EXEC
是TSQL语法 - EXECUTE
是PLSQL / Oracle语法,但都不是必需的答案 1 :(得分:3)
我担心你的错误和问题比你的代码中的行更多。它是SQL语句,PL / SQL和其他语言的变量绑定的混合。
由于您使用 declare / begin / end 块,因此您处于PL / SQL世界中。在PL / SQL世界中:
不要忘记提交。
所以解决方案可能是:不要使用PL / SQL。
create global temporary table dateRest (rest number,nerest number);
insert into dateRest(x, y)
select (select count(*) from view2 where restituita=1),
(select count(*) from view2 where restituita=0)
from dual;
commit;
答案 2 :(得分:0)
您应该在(匿名)程序中丢失:
参数。
[编辑]
不,我错了。不使用EXEC时不需要:
。我认为你的问题在于创建表格。这是不可能的,因为PLSQL不支持CREATE TABLE语句。你应该使用:
EXECUTE IMMEDIATE 'CREATE TABLE ....';
答案 3 :(得分:0)
更正的OMG匿名阻止将是:
DECLARE
var1 Number;
var2 Number;
BEGIN
SELECT SUM(CASE WHEN restituita = 1 THEN 1 ELSE 0 END),
SUM(CASE WHEN restituita = 0 THEN 1 ELSE 0 END)
INTO var1, var2
FROM view2;
END;