Die gespeicherte Prozedur der Oracle-Datenbank wird in Verbindung mit dem Cursor verwendet

Die gespeicherte Prozedur der Oracle-Datenbank wird in Verbindung mit dem Cursor verwendet



Vorwort

Erfassen Sie während des Praktikums einfach die Stored Procedures und Cursorkenntnisse der Oracle-Datenbank.


Zuerst eine gespeicherte Prozedur in der Oracle-Datenbank erstellen?

1. Erstellung einer gespeicherten Oracle-Datenbankprozedur (mit Parametern)

CREATE OR REPLACE PROCEDURE 存储过程的名字(userPhid in number) AS
BEGIN
这里填写要执行的与语句 
END 存储过程的名字;

2. Erstellung einer gespeicherten Oracle-Datenbankprozedur (ohne Parameter)

CREATE OR REPLACE PROCEDURE 存储过程的名字() AS
BEGIN
这里填写要执行的与语句 
END 存储过程的名字;

3. Grundkenntnisse der gespeicherten Prozeduren von Oracle-Datenbanken

Oracle hat drei Parametermodi:
1.in ist der Standardmodus des Parameters Dieser Modus hat bereits einen Wert, wenn das Programm läuft, und der Wert wird sich im Programmrumpf nicht ändern.
2. Die durch den out-Modus definierten Parameter können nur innerhalb des Prozesskörpers zugewiesen werden, was bedeutet, dass der Parameter einen bestimmten Wert an den aufrufenden Prozess zurückgeben kann. 3. in out bedeutet, dass
der High-Parameter einen Wert an den Prozess übergeben kann. oder ein bestimmter Wert ausgebreitet

Schleifensteuerungsanweisung:

1. LOOP-Zyklus:

	LOOP
		EXIT [WHEN 条件表达式] --循环终止条件,为ture时,退出循环,否则再次执行循环体
		语句段;
	END LOOP;

2. While-Schleife:

WHILE 条件表达式 LOOP
	语句段;
END LOOP;

3. FOR-Schleife:

FOR 循环变量 in [REVERSE] 初值表达式..终值表达式 LOOP
	语句段;
END LOOP;

2. Oracle-Datenbank-Cursor-Kenntnisse?

1. Impliziter Cursor

DML-Operationen und einzeilige SELECT-Anweisungen verwenden implizite Cursor, und zwar:
1. Einfügeoperation: INSERT.
2. Update-Vorgang: UPDATE.
3. Vorgang löschen: DELETE.
4. Abfrageoperation für einzelne Zeilen: SELECT ... INTO ....

2. Cursor anzeigen

1. Cursordeklaration mit Parametern:

CURSOR 游标名 (参数1 数据类型,......)
IS
SELECT语句;

2. Cursordeklaration ohne Parameter:

CURSOR 游标名
IS
SELECT语句; 

3. Cursor-Betrieb

1. Öffnen Sie den Cursor:

在可执行部分,按以下格式打开游标: 
OPEN 游标名(参数1,.....) 		--存在参数
或者
OPEN 游标名 				--不存在参数
打开游标时,SELECT语句的查询结果就被传送到了游标工作区。

2. Schließen Sie den Cursor:

CLOSE 游标名;
显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,
游标变成无效,必须重新打开才能使用。

3. Wie verwendet man die gespeicherte Prozedur der Oracle-Datenbank mit dem Cursor?

CREATE OR REPLACE PROCEDURE csccgc(userPhid in number) AS
  deptId number;--声明一个变量存储当前用户的部门id 
  orgType varchar(15);--声明一个变量存储当前组织的组织类型
  parentId number;--声明一个变量存储当前组织的父级id
  orgType1 varchar(15);--声明一个变量存储当前组织的组织类型
  parentId1 number;--声明一个变量存储当前组织的父级id
  --声明一个游标跟据存储过程传入的用户id得到部门id 
   cursor did is select phid_dept from pms3_spp_eval_table where phid = userPhid;
  --声明一个游标跟据根据前面得到的部门id进程查询这个部门是不是一个组织
  cursor org(deptid number) is select orgtype,parent_orgid from fg_orglist where phid = deptid;
  --声明一个游标跟据根据前面得到的部门id进程查询这个部门的父级Id
  cursor parents(parentid number) is select orgtype,parent_orgid from fg_orglist where phid = parentid;
  --vrow did%rowtype;
  --vrow org_type%rowtype;
BEGIN
    --update req_p_d set user_bgh_qty = vrow.qty,user_bgh_amt = vrow.amt where pphid = vrow.glclxqd and phid_itemid = vrow.itemid;
    --commit;
    for x in did loop--游标取值 循环
    --dbms_output.put_line(x.phid_dept);
    deptId := x.phid_dept;
    dbms_output.put_line(deptId);
    END LOOP;
    
    for y in org(deptId) loop--游标取值 循环
    --dbms_output.put_line(y.orgtype);
    orgType := y.orgtype;
    --dbms_output.put_line(orgType);
    parentId := y.parent_orgid;
    --dbms_output.put_line(parentId);
    END LOOP;
    if orgType = 'y'--条件
    then --开始执行
      dbms_output.put_line(111111);
    else --不满足条件开始执行
      for f in parents(parentId) loop--游标取值 循环
        orgType := f.orgtype;
        dbms_output.put_line(orgType);
        parentId := f.parent_orgid;
        dbms_output.put_line(parentId);
      END LOOP;
      --org_type1 is select orgtype from fg_orglist where phid = parentId;
      --parentId2 is select parent_orgid from fg_orglist where phid = parentId;
      --if orgType == 'y'--条件
      --then--执行
          
      --else       
    end if;
    --close did;   
END csccgc;

Guess you like

Origin blog.csdn.net/qq_49023625/article/details/126892688