T-SQL中的示例(SQL Server - 取自here):
CREATE PROC proc_authors
@au_lname VARCHAR(40)
AS
SELECT
au_id, au_fname, au_lname, city, state
FROM authors
WHERE au_lname = @au_lname
go
在Oracle中是否可以创建一个返回内联表的存储过程(不声明类型 - 如上所述)?如果没有,最接近的替代方案是什么?即声明内联类型,然后使用它。我们的想法是尽量减少授予的数据库权限。
请将示例代码作为答案的一部分。
使用存储过程与功能背后的推理 - 我们有遗留软件只能执行存储过程或原始查询。似乎只有那里的存储过程支持参数化执行,这就是我们所追求的。
答案 0 :(得分:1)
也许你正在寻找这样的东西:
create table author
(
au_id number,
au_name varchar2(100)
);
insert into author (au_id, au_name) values(1, 'ME');
create or replace function getAuthor(auName varchar2)
return author%rowtype
is
retval author%rowtype;
begin
select * into retval from author where au_name=auName;
return retval;
end;
declare
auth author%rowtype;
begin
auth := getAuthor('ME');
dbms_output.put_line(auth.au_id);
end;
答案 1 :(得分:1)
使用ref cursor
尝试此操作{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE TupleSections #-}
import Z3.Monad
import Control.Monad.IO.Class
import Control.Applicative
import Data.Traversable
import Prelude hiding (sequence)
main = do
out <- evalZ3 $ do
is <- mkIntSort
_3 <- mkInteger 3
_5 <- mkInteger 5
_10 <- mkInteger 10
x <- mkFreshIntVar "x"
y <- mkFreshIntVar "y"
y2 <- mkBvmul y y
assert =<< mkAnd =<< sequence
[ mkEq x y2
]
return ()
print "end"
您将从您的表中收集所有数据,您可以在java或调用程序中进行迭代。