我有这张桌子:
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) 问题
我正在努力在 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) 我正在尝试按照本指南创建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)