将T-SQL存储过程转换为Oracle
我想将下面的T-SQL存储过程转换为Oracle存储过程将T-SQL存储过程转换为Oracle,oracle,tsql,stored-procedures,Oracle,Tsql,Stored Procedures,我想将下面的T-SQL存储过程转换为Oracle存储过程 CREATE PROCEDURE myProc ( @FirstName nvarchar(20), @LastName nvarchar(20) ) AS BEGIN SELECT p.PersonId, p.Address, p.FirstName, p.LastName FROM People p WHERE p.Firs
CREATE PROCEDURE myProc
(
@FirstName nvarchar(20),
@LastName nvarchar(20)
) AS
BEGIN
SELECT p.PersonId,
p.Address,
p.FirstName,
p.LastName
FROM People p
WHERE p.FirstName = @FirstName
AND p.LastName = @LastName
END
GO
您可以在oracle中将其转换为如下过程:
CREATE OR REPLACE PROCEDURE myProc
(
i_FirstName varchar2(20), -- alternatively use People.FirstName%type instead of varchar2(20)
i_LastName varchar(20),
o_PersonId out People.PersonId%type,
o_Address out People.Address%type,
) AS
BEGIN
SELECT p.PersonId, p.Address
INTO o_PersonId, o_Address
FROM People p
WHERE p.FirstName = i_FirstName
AND p.LastName = i_LastName;
END;
正如@a_horse_和_no_name警告的那样,上面的方法适用于单行。您也可以对多行使用以下操作:
SQL> set serveroutput on;
SQL> CREATE OR REPLACE PROCEDURE myProc
(
i_FirstName varchar2(20), -- alternatively use People.FirstName%type instead of varchar2(20)
i_LastName varchar(20),
o_PersonId out People.PersonId%type,
o_Address out People.Address%type,
) AS
BEGIN
for c in
(
SELECT p.PersonId, p.Address
FROM People p
WHERE p.FirstName = i_FirstName
AND p.LastName = i_LastName
)
loop
o_PersonId := c.PersonId;
o_Address := c.Address;
dbms_output.put_line(' Person id : '||o_PersonId||' - Address : '||o_Address);
end loop;
END;
SQL> var fname varchar2;
SQL> var lname varchar2;
SQL> exec myProc(:fname,:lname);
SQL> /
- 您不需要在
类型参数之前添加in
关键字,但是in
类型参数需要out
关键字out
- 如果您的Oracle数据库是使用Unicode字符集创建的,则应将
迁移到Oracle中的NVARCHAR
VARCHAR2
部件代表重复编译存储过程。如果省略,它将引发一个错误,告诉您或REPLACE
对象已经存在