0

在 SQL Server 中,您可以这样做:

DECLARE @ID int
SET @ID=1
SELECT * FROM Person WHERE ID=@ID

什么是等效的 Oracle 代码?

我花了一些时间在谷歌上搜索这个,但我还没有找到答案。

4

3 回答 3

1

Oracle® Database PL/SQL User's Guide 中的以下链接/页面提供了变量声明的概述:

http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/constantvar_declaration.htm

下面的示例取自用户指南的另一页。

DECLARE
  bonus  NUMBER(8,2);
  emp_id NUMBER(6) := 100;
BEGIN
  SELECT salary * 0.10 INTO bonus FROM employees 
    WHERE employee_id = emp_id;
END;
/

...对于您的示例...

DECLARE
  p_id NUMBER(6) := 1;
BEGIN
  SELECT * FROM Person WHERE ID = p_id;
END;
/

问候,

于 2013-09-19T17:56:47.297 回答
1

您创建一个绑定变量

VARIABLE ID number

分配变量必须在 PL/SQL 块中完成(执行是执行此操作的捷径)

execute :id := 1

然后您可以在 sql 语句中使用它

SELECT * FROM Person WHERE ID=:ID ;
于 2013-09-19T20:10:45.457 回答
0

我也没有找到一种方法来做同样的事情。Oracle 的 PL/SQL 在块内操作,块不会在查询结果窗口中显示查询结果(例如在 SQL Developer 中)。您可以让它将信息输出到 Dbms 输出,但它不像在 SQL Server 中那样快速和简单。

这是一个块的例子。

DECLARE rid NUMBER := 1;
  rec UNIQUEVALTEST%ROWTYPE;

BEGIN 
  SELECT * INTO rec FROM UNIQUEVALTEST WHERE recid = rid;
  dbms_output.put_line(rec.FNAME);
END;

我阅读的PL/SQL 教程涵盖了所有这些,这与PM 77-1在他的评论中链接的相同。

尝试使用您的变量从表中进行快速选择并不能真正奏效。例如,如果您使用的是 Oracle SQL Developer,则结果不会显示在结果查询结果框架中。但是,如果您正在执行更新或插入,它的工作原理与 SQL Server 几乎相同。

这是一个示例,从创建一些虚构的测试数据开始。

--Create testing table
CREATE TABLE UniqueValTest (
  fname NVARCHAR2(100),
  lname NVARCHAR2(100),
  address NVARCHAR2(100),
  city NVARCHAR2(50),
  state NVARCHAR2(2),
  zip NVARCHAR2(5),
  age NUMBER,
  recid NUMBER
  );

--Create sample data
INSERT INTO UniqueValTest (fname, lname, address, city, state, zip, age, recid)
VALUES ('JOHN', 'SMITH', '123 MAIN ST', 'JAMESTOWN', 'LA', '12345', 28, 1);
INSERT INTO UniqueValTest (fname, lname, address, city, state, zip, age, recid)
VALUES ('JENNIFER', 'SMITH', '123 MAIN ST', 'JAMESTOWN', 'LA', '12345', 30, 2);
INSERT INTO UniqueValTest (fname, lname, address, city, state, zip, age, recid)
VALUES ('RACHEL', 'ALLEN', '225 MAIN ST', 'JAMESTOWN', 'LA', '12345', 25, 3);
INSERT INTO UniqueValTest (fname, lname, address, city, state, zip, age, recid)
VALUES ('JOSEPH', 'ALLEN', '225 MAIN ST', 'JAMESTOWN', 'LA', '12345', 25, 4);
INSERT INTO UniqueValTest (fname, lname, address, city, state, zip, age, recid)
VALUES ('MARK', 'MCBRIDE', '228 MAIN ST', 'JAMESTOWN', 'LA', '12345', 55, 5);

和变量:

DECLARE rid NUMBER := 1;

BEGIN 
  UPDATE UNIQUEVALTEST SET fname = 'JAKE' WHERE recid = rid;
END;

并测试它:

SELECT * FROM UNIQUEVALTEST WHERE recid = 1;

当然,像这样运行一个简单的更新会不必要地复杂,但是当您开始使用游标和循环来赋予代码块更多功能时,您会看到潜力。

SQL 小提琴示例

于 2013-09-19T18:58:54.510 回答