在oracle的PL/SQL里,serial关键字可以作为变量名并使用。本次LightDB数据库对serial做了功能增强,支持在PL/SQL里可以作为变量名并使用。
普通赋值使用
DECLARE
serial varchar;
begin
dbms_output.serveroutput(true);
serial :=left('abc',2);
DBMS_OUTPUT.PUT_LINE(serial);
end;
/
DECLARE
serial varchar(20);
company varchar(30);
introduction varchar;
choice char(1);
BEGIN
dbms_output.serveroutput(true);
serial := 'John Smith';
company := 'Infotech';
introduction := ' Hello! I''m John Smith from Infotech.';
choice := 'y';
IF choice = 'y' THEN
DBMS_OUTPUT.PUT_LINE(serial);
DBMS_OUTPUT.PUT_LINE(company);
DBMS_OUTPUT.PUT_LINE(introduction);
END IF;
END;
/
混合复合使用
循环
DECLARE
serial number(1);
j number(1);
BEGIN
dbms_output.serveroutput(true);
<< outer_loop >>
FOR serial IN 1..3 LOOP
<< inner_loop >>
FOR j IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE(('serial is: '|| serial || ' and j is: ' || j));
END loop inner_loop;
END loop outer_loop;
END;
/
数组
DECLARE
type namesarray IS VARRAY(5) OF VARCHAR(10);
type grades IS VARRAY(5) OF INTEGER;
serial namesarray;
marks grades;
total integer;
BEGIN
dbms_output.serveroutput(true);
serial := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := serial.count;
DBMS_OUTPUT.PUT_LINE('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
DBMS_OUTPUT.PUT_LINE('Student: ' || serial(i) || ' Marks: ' || marks(i));
END LOOP;
END;
/
DECLARE
type serial IS VARRAY(5) OF VARCHAR(10);
type grades IS VARRAY(5) OF INTEGER;
a serial;
marks grades;
total integer;
BEGIN
dbms_output.serveroutput(true);
a := serial('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := a.count;
DBMS_OUTPUT.PUT_LINE('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
DBMS_OUTPUT.PUT_LINE('Student: ' || a(i) || ' Marks: ' || marks(i));
END LOOP;
END;
/
游标
create table caofa_customers(
id serial PRIMARY key,
n varchar,
age number,
SALARY number
);
insert into caofa_customers(n,age,salary) values('Ramesh',32,500);
DECLARE
serial number(2);
BEGIN
dbms_output.serveroutput(true);
UPDATE caofa_customers
SET salary = salary + 500;
IF sql%notfound THEN
DBMS_OUTPUT.PUT_LINE('no caofa_customers selected');
ELSIF sql%found THEN
serial := sql%rowcount;
DBMS_OUTPUT.PUT_LINE( serial || ' caofa_customers selected ');
END IF;
END;
/