在 SQL Server 中,您可以这样做:
DECLARE @ID int
SET @ID=1
SELECT * FROM Person WHERE ID=@ID
什么是等效的 Oracle 代码?
我花了一些时间在谷歌上搜索这个,但我还没有找到答案。
在 SQL Server 中,您可以这样做:
DECLARE @ID int
SET @ID=1
SELECT * FROM Person WHERE ID=@ID
什么是等效的 Oracle 代码?
我花了一些时间在谷歌上搜索这个,但我还没有找到答案。
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;
/
问候,
您创建一个绑定变量
VARIABLE ID number
分配变量必须在 PL/SQL 块中完成(执行是执行此操作的捷径)
execute :id := 1
然后您可以在 sql 语句中使用它
SELECT * FROM Person WHERE ID=:ID ;
我也没有找到一种方法来做同样的事情。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;
当然,像这样运行一个简单的更新会不必要地复杂,但是当您开始使用游标和循环来赋予代码块更多功能时,您会看到潜力。