相关疑难解决方法(0)

如何从执行动态SQL的Oracle PL/SQL匿名块返回结果集/游标?

我有这张桌子:

ALLITEMS
---------------
ItemId  | Areas
---------------
1       | EAST
2       | EAST
3       | SOUTH
4       | WEST
Run Code Online (Sandbox Code Playgroud)

DDL:

drop table allitems;

Create Table Allitems(ItemId Int,areas Varchar2(20));
Insert Into Allitems(Itemid,Areas) Values(1,'east');
Insert Into Allitems(ItemId,areas) Values(2,'east');
insert into allitems(ItemId,areas) values(3,'south');
insert into allitems(ItemId,areas) values(4,'east');
Run Code Online (Sandbox Code Playgroud)

在MSSQL中,要从动态SQL获取游标,我可以这样做:

DECLARE @v_sqlStatement VARCHAR(2000);
SET @v_Sqlstatement = 'SELECT * FROM ALLITEMS';
EXEC (@v_sqlStatement); --returns a resultset/cursor, just like calling SELECT 
Run Code Online (Sandbox Code Playgroud)

在Oracle中,我需要使用PL/SQL块:

SET AUTOPRINT ON;
DECLARE
 V_Sqlstatement Varchar2(2000);
 outputData SYS_REFCURSOR;
BEGIN
 V_Sqlstatement := 'SELECT * FROM ALLITEMS'; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

23
推荐指数
2
解决办法
13万
查看次数

如何在 PL/SQL 中声明和设置变量

问题

我正在努力在 PL/SQL 中定义变量

在 T-SQL 中,很容易声明和设置变量并在 Select 查询中引用它们(如下所示)。但是我该如何在 PL/SQL 中做类似的事情呢?

我尝试过什么

这似乎是 Stack 上多次被问到的常见问题,但没有明确的答案!我得到的最接近的是这里链接,但即使如此我也无法让它为我工作。

我的各种 PL/SQL 尝试

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';
     dbms_output.print_line(myname);
END;

variable v_date datetime;
exec :v_date := to_date('01/01/2014','mm/dd/yyyy');

var myname varchar2(20);
exec :myname := 'Tom';
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的事情的 T-SQL 示例

DECLARE 
    @String VARCHAR(10),
    @Date DATE,
    @Integer As INT

SET @String = 'Hello'
SET @Date = '20200413'
SET @Integer = Year(@Date)

SELECT *
FROM TABLE
WHERE 1=1
AND col_a = @String
AND col_b >= @Year
Run Code Online (Sandbox Code Playgroud)

oracle plsql

3
推荐指数
1
解决办法
1万
查看次数

在 pl/sql 块中声明变量

我正在尝试按照本指南创建pl/sql块,但在SET orderNumberSEQ.... 我究竟做错了什么?

declare
orderNumberSEQ number(5);
userid varchar(20);

begin
insert into bs_orders (userid, ono, timepurchased)
values('lilith', orderNum_seq.NEXTVAL,(SELECT current_timestamp FROM dual));

SET orderNumberSEQ := orderNum_seq.CURRVAL;

SELECT userid FROM bs_orders
where ono = orderNumberSEQ;
end;
/
Run Code Online (Sandbox Code Playgroud)

sql variables plsql declare

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

plsql ×3

oracle ×2

declare ×1

sql ×1

variables ×1