在SQL Server中,您可以执行以下操作:
DECLARE @ID int
SET @ID=1
SELECT * FROM Person WHERE ID=@ID
什么是等效的Oracle代码?
我花了一些时间谷歌搜索这个,但我还没有找到一个anwser。
答案 0 :(得分:1)
Oracle®DatabasePL / SQL用户指南中的以下链接/页面提供了变量声明的概述:
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;
/
此致
答案 1 :(得分:1)
您创建了一个绑定变量
VARIABLE ID number
分配变量必须在PL / SQL块中完成(执行是快捷方式)
execute :id := 1
然后,您可以在sql语句中使用它
SELECT * FROM Person WHERE ID=:ID ;
答案 2 :(得分: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 tutorial涵盖了所有这些内容,与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;
当然,运行这样的简单更新会不必要地复杂化,但是当您开始使用游标和循环来为代码块提供更多功能时,您可以看到潜力。