【问题标题】:PLSQL VariablesPLSQL 变量
【发布时间】:2017-02-16 15:13:40
【问题描述】:

我是编程新手,我想知道如何声明一个可以在我的代码中使用的变量。

我想要实现的是:

Myvariable = (select Column from table1 where column =1234 group by column);
select column from table2 where column in (myvariable);
select column from table3 where column in (myvariable);

等等

提前致谢:)

【问题讨论】:

  • 标签sql-serverplsql 不能混用。您使用的是 Microsoft SQL Server 还是 Oracle?
  • 我删除了不兼容的数据库标签。请标记您真正使用的数据库。
  • 在sql中可以通过DECLARE @variableName DATATYPE声明变量。来自选择查询的值由SELECT @variableName = column FROM table WHERE column=1234 分配给变量

标签: sql variables subquery plsqldeveloper declare


【解决方案1】:

如果您使用 PL/SQL Developer 访问 Oracle 数据库,您可以使用类似于以下代码的代码创建一个测试窗口(文件 - 新建 - 测试窗口):

DECLARE
  myVariable  TABLE1.COLUMN%TYPE := 1234;
BEGIN
  FOR aRow2 IN (SELECT COLUMN
                  FROM TABLE2
                  WHERE COLUMN = myVariable)
  LOOP
    DBMS_OUPUT.PUT_LINE('Do something with ''aRow2''');
  END LOOP;

  COMMIT;

  FOR aRow3 IN (SELECT COLUMN
                  FROM TABLE3
                  WHERE COLUMN = myVariable)
  LOOP
    DBMS_OUPUT.PUT_LINE('Do something with ''aRow3''');
  END LOOP;

  COMMIT;
END;

您需要编辑以上内容,以便对 TABLE2 和 TABLE3 中的行执行任何操作。

祝你好运。

【讨论】:

  • 您好,谢谢您的回复,我会看看这个。这也仅适用于测试窗口吗?或者这也适用于 SQL 窗口。
  • 要从 SQL 窗口运行此程序,您需要使用鼠标突出显示从 DECLAREEND; 的所有文本,然后单击执行按钮(或按 F8 键),所以从测试窗口运行它更容易,您只需单击执行(或按 F8 键)。
【解决方案2】:

这不是一个真正的变量......你可以这样写sql

select column 
from table2 
where column in (select Column from table1 where column =1234 group by column);

【讨论】:

  • 您好,感谢您的回答,我想创建一个工具,我只需要更改一个数字一次,而不是通过我的所有代码来更改所有数字存在的位置。
【解决方案3】:

您可以使用绑定到当前会话的临时 TEMPORARY TABLE:

DECLARE GLOBAL TEMPORARY TABLE temp
{ 
    column INTEGER 
}
ON COMMIT DELETE ROWS  -- Specify PRESERVE ROWS if you want to keep them through commits
NOT LOGGED 
ON ROLLBACK DELETE ROWS  -- Remove this line if you want to keep rows when  you rollback a transaction

你加载表格:

insert into temp1 (select Column from table1 where column =1234 group by column)

然后您可以使用通用代码使用数据:

select column from table2 where column in (select column from temp1);
select column from table3 where column in (select column from temp1);

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多