Oracle Grundkenntnisse in Grammatik, praktisches Lernen

Orakeltabellenstruktur, grundlegendes Satzlernen

Oracle12C-Version

Offizielles Dokument: https://docs.oracle.com/apps/search/search.jsp?q=CLOB&category=database

Was ist eine Oracle-Datenbank?

  1. Oracle Database, auch bekannt als Oracle RDBMS, kurz Oracle. Es ist ein relationales Datenbankverwaltungssystem, das von Oracle gestartet wurde.
  2. Das Oracle-Datenbanksystem ist derzeit ein weltweit beliebtes relationales Datenbankverwaltungssystem. Es bietet die Vorteile einer guten Portabilität, einfachen Verwendung und starker Funktionen. Es ist in verschiedenen großen, mittleren, kleinen und Mikrocomputerumgebungen anwendbar.
  3. Oracle ist eine hocheffiziente, zuverlässige Datenbanklösung mit hohem Durchsatz

Was bedeuten Datenbanken und Instanzen?

Der Oracle-Datenbankserver besteht aus einer Datenbank und mindestens einer Datenbankinstanz.

1

Wie ist die Speicherstruktur der gespeicherten Daten von Oracle und was ist darin enthalten?

1. Physische Speicherstruktur

Bedeutung: Die physische Speicherstruktur ist eine reine Datei, in der Daten gespeichert werden. Datendatei : Die realen Daten, eine Datenstruktur einer logischen Datenbank (z. B. Tabellen und Indizes) werden physisch in einer Datendatei gespeichert. Steuerdatei : Jede Oracle - Datenbank verfügt über eine Steuerdatei enthält Metadaten. Zu den Metadaten, die zur Beschreibung der physischen Struktur der Datenbank verwendet werden, gehören der Datenbankname und die Dateispeicherortdaten für Online-Redo-Log-Dateien : Jede verfügt über ein Online-Redo-Log für die Oracle-Datenbank, das zwei oder mehr Online-Redo-Log-Dateien enthält. Bestehend aus Redo-Einträgen, die alle an den Daten vorgenommenen Änderungen aufzeichnen können. 2, die logische Speicherstruktur des Datenblocks (die Datenblöcke) : die im Datenblock gespeicherten Oracle-Daten. Datenblöcke werden auch als logische Blöcke, Oracle-Blöcke oder Seiten bezeichnet, die der Anzahl der Bytes auf der Festplatte entsprechen. Extents : Extents sind die spezifische Anzahl logisch kontinuierlicher Datenblöcke, die zum Speichern bestimmter Arten von Informationen verwendet werden. Segmente (Segmente) : Ein Satz von Segmenten wird für den Benutzerobjektspeicherbereich (z. B. eine Tabelle oder ein Index) zugewiesen. Tabellenbereich (die Tablespaces) : Die Datenbank ist in eine Tabelle unterteilt, die als logische Speichereinheit bezeichnet wird. Ein Tabellenbereich ist ein logischer Container für Segmente. Jeder Tabellenbereich enthält mindestens eine Datendatei.







Die Oracle-Instanz ist in mehrere Teile unterteilt. Was enthalten sie?

Oracle Grundbefehle

Benutzer erstellen:

Benutzer erstellen Benutzer05 identifiziert durch 123456 --Erstellen eines neuen Oracle-Benutzers
gewähren CONNECT, RESOURCE, DBA TO Benutzer05 - Anweisung GRANT gewährt Benutzer05 Benutzerberechtigungen
Benutzer löschen04; - Benutzer löschen

Benutzer ändern user01 identifiziert durch 111111; -benutzerkennwort ändern

CONNECT user05 / 123456 - Verbinden Sie sich, um einen Benutzer zu erstellen

Datentabellenbereich (Tablespace):
Tabellenbereichstabellenname
erstellen Datendatei Datendateiname 'Größe Tabellenbereichsgröße Tabellenbereich erstellen Datentest data_test Datendatei': \ oracle \ oradata \ test \ data.dbf 'Größe 2000M;
Benutzer erstellen und Tabellenbereich angeben :
CREATE USER cici IDENTIFIZIERT DURCH cici PROFIL DEFAULT DEFAULT TABLESPACE CICI ACCOUNT UNLOCK;
Benutzer jykl erstellen, identifiziert durch jykl Standardtabellenbereich jykl_data temporärer Tabellenbereich jykl_temp;
Grant für neue Benutzer:
GRANT connect, resource TO
cici;

Ergänzungen, Löschungen und Änderungen:

select * from Class; --query Daten
INSERT in Classinfo (CLASSNAME) VALUES ( '明');
--Insert Datenaktualisierung , wo CLASSID = 1,0
--Modify Daten aus Class streichen id = 1; Daten löschen

Sortieren:

Syntax: SELECT Spaltenname FROM gibt den Spaltennamen ORDER BY an

SELECT Spalte_1 FROM Tabellenname ORDER BY Spalte_1 Sortierung

Parameter für Sortierregeln:

  • ASC bedeutet in aufsteigender Reihenfolge sortieren
  • DESC bedeutet in absteigender Reihenfolge sortieren
  • NULLS FIRST setzt NULL-Werte vor Nicht-NULL-Werte
  • NULLS LAST setzt NULL-Werte nach Nicht-NULL-Werten.

Daten filtern

● DISTINCT - beschreibt, wie doppelte Zeilen in der Abfrageausgabe entfernt werden.

Wählen Sie einen eindeutigen Spaltennamen aus dem Tabellennamen

● WHERE-Demonstrieren Sie, wie Sie Filterbedingungen für Zeilen in der von einer Abfrage zurückgegebenen Ergebnismenge angeben.

Wählen Sie den Spaltennamen aus dem Tabellennamen unter den Bedingungen

● UND-Kombinieren Sie zwei oder mehr Boolesche Ausdrücke. Wenn alle Ausdrücke wahr sind, geben Sie wahr zurück.

Wählen Sie den Spaltennamen aus dem Tabellennamen aus, in dem Bedingungen und Bedingungen angegeben sind

● ODER-Kombinieren Sie zwei oder mehr boolesche Ausdrücke. Wenn einer der Ausdrücke wahr ist, gibt er wahr zurück.

Wählen Sie den Spaltennamen aus dem Tabellennamen aus, in dem Bedingung oder Bedingung

● FETCH - Demonstrieren Sie, wie Sie mit der Zeilenbegrenzungsklausel die Anzahl der von einer Abfrage zurückgegebenen Zeilen begrenzen.

Parameter:

Als nächstes abrufen: Gibt nur die Anzahl der Zeilen oder den Prozentsatz der Anzahl der Zeilen nach FETCH NEXT (oder FIRST) zurück.

返回库存数量最多的前5个产品。
SELECT
    product_name,
    quantity
FROM
    inventories
INNER JOIN products
        USING(product_id)
ORDER BY
    quantity DESC 
FETCH NEXT 5 ROWS ONLY;

mit Bindungen: Gibt den gleichen Sortierschlüssel wie die letzte Zeile zurück (gibt zwei weitere Zeilen zurück).

查询前10个数据
SELECT
 product_name,
 quantity
FROM
 inventories
INNER JOIN products
 USING(product_id)
ORDER BY
 quantity DESC 
FETCH NEXT 10 ROWS WITH TIES;

● IN- Bestimmen Sie, ob der Wert mit einem Wert in der Liste oder Unterabfrage übereinstimmt.

Wählen Sie den Spaltennamen aus dem Tabellennamen, wo nicht in (Parameter)

Wählen Sie den Spaltennamen aus dem Tabellennamen aus, in dem (Parameter)

  1. nicht in (Parameter)
  2. in (Parameter)

● ZWISCHEN - Filtern Sie Daten basierend auf einer Reihe von Werten (Intervallwerten). ,

Wählen Sie den Spaltennamen aus dem Tabellennamen aus, wobei der Spaltenname zwischen Bedingungen und Bedingungen liegt

 SELECT product_name,standard_cost 
 FROM  products
 WHERE standard_cost 
 BETWEEN 500 AND 600 
 ORDER BY standard_cost; 

Daten zwischen 500-600 zurückgeben und sortieren

  1. ZWISCHEN Bedingungen und Konditionen
  2. ZWISCHEN nicht Zustand und Zustand

● LIKE - Führen Sie einen Abgleich basierend auf einem bestimmten Muster durch.

 SELECT  first_name,last_name,phone 
 FROM contacts 
 WHERE last_name 
 LIKE 'St%' 
 ORDER BY last_name; 

Spaltenname nicht wie 'Bedingung%'

Spaltenname wie 'Bedingung%'

Oracle-Aggregatfunktionen (Gruppe nach Gruppierung verwenden)

Der Name der Aggregatfunktion in Oracle Die Rolle der Funktion
Anzahl Wird verwendet, um die Anzahl der gültigen Daten zu ermitteln
Max Wird verwendet, um die größten Daten in den angegebenen Daten zu finden
Mindest Wird verwendet, um die kleinsten Daten in den angegebenen Daten zu finden
Durchschn Wird verwendet, um die angegebenen Daten zu mitteln
Summe Wird verwendet, um die angegebenen Daten zu summieren
Varianz Wird verwendet, um die Standardabweichung der angegebenen Daten zu ermitteln
Stddev Wird verwendet, um die Varianz der angegebenen Daten zu ermitteln

Nullwerte werden ignoriert

Oracle Basisdatentypen

Zeichentyp Numerisch Datumstyp Andere Arten
CHAR (n) NUMMER (p, s) DATUM (einschließlich Jahrhundert, Jahr, Monat, Tag, Stunde, Minute und Sekunde) BLOB (unstrukturierter binärer Datentypspeicher für große Objekte)
NCHAR (n) binary_float TIMESTAMP (Datum und Uhrzeit, einschließlich Dezimalstellen) CLOB (Character Large Object)
VARCHAR2 (n) binary_double
NVARCHAR2 (n)

Oracle-Einschränkungen

  • Nicht-Null-Einschränkung (NICHT NULL)
  • Primärschlüsseleinschränkung (PRIMARY KEY)
  • Fremdschlüsseleinschränkungen (Primärschlüsselreferenzen)
  • Einzigartige Einschränkung (EINZIGARTIG)
  • Einschränkungen prüfen (PRÜFEN)

Oracle-Index

create 索引名 index  自定义索引名称 on 表名(列)

logisch:

Einspaltiger einzeiliger Index

Verketteter mehrzeiliger Index

  create index 索引名 on 表名(列名....) 

Eindeutiger Index (eindeutiger Index)

 create unique index 索引名 on 表名(列名)

Nicht eindeutig Nicht eindeutiger Index (nicht eindeutiger Index)

 非唯一索引中,数据库通过将rowid作为额外的列附加到键中来存储它 |唯一索引中,索引键不包含rowid
 CREATE INDEX 索引名 on 表名(列名 DESC)

Funktionsbasierter Funktionsindex (funktionsbasierter Index)

 这些就是 B* 树索引或位图索引,它将一个函数计算得到的结果存储在行的列中,而不是存储列数据本身 
 查询函数索引:
 SELECT * FROM DBA_INDEXES D WHERE D.INDEX_TYPE LIKE 'FUNCTION-BASED%';
 函数需要满足的条件:
 不能使用SUM、COUNT等聚合函数
 不能在LOB类型的列、NESTED TABLE列上创建函数索引
 不能使用SYSDATE、USER等非确定性函数。
 对于任何用户自定义函数必须显式的声明DETERMINISTIC关键字
 语法:
 CREATE TABLE 表名(ID NUMBER,SCHR VARCHAR2(10));
 CREATE INDEX IND_FUN ON 表名(UPPER(SCHR));
  INSERT INTO TESTFINDEX_LHR VALUES(1,'ddddd');
   SELECT  * FROM 表名 WHERE UPPER(SCHR)='ddddd';

Domänenindex (Domänenindex)

应用域索引是你自己构建和存储的索引,可能存储在Oracle 中,也可能在 Oracle 之外。
方式:
CREATE INDEX text_idx ON table_index(object_name) indextype is ctxsys.context;
Logische Aussage
1. Fügen Sie Daten in FOR-Zyklen ein (verwenden Sie ihn für die spezifische Anzahl von Bremszyklen).
BEGIN
		   FOR i IN  1..1000 LOOP 
			  INSERT INTO TEST_USER VALUES(sys_guid(),'MING','123456');
			 END LOOP;
			 COMMIT;
		END;
BEGIN
   FOR i IN  1..5 LOOP 
	   FOR j IN 1..i LOOP   
		  DBMS_OUTPUT.put('*');
		 END LOOP;
		  DBMS_OUTPUT.put_line('');
	 END LOOP;
	 
END;
2. Fügen Sie Daten in den WHILE-Zyklus ein (wenn der Zyklus nicht einmal ausgeführt wird, ist dies der Zyklus).
declare
		 p_sql varchar2(500);
		 i number;
		 begin
		   i:=0;
		   WHILE(i<12000) LOOP
		       p_sql:= 'INSERT INTO TEST_USER VALUES(SYS_GUID(),''' || 'tt' || ''',
					 ''' || '123456' || ''')';  
		       i:=i+1;
		      execute immediate p_sql;
		    commit;
		   end loop;
		  end;
3. Schleife zum Einfügen von Daten in eine Schleife (Sie wissen nicht genau, wie oft diese Schleife verwendet wird)

exit: Beenden Sie die Schleife

DECLARE 
 v integer:=10;
BEGIN
   LOOP
	    v:=v-1;
			DBMS_OUTPUT.put_line('这个值时:'|| v);
		 IF v<3 THEN
		   dbms_output.put_line('已循环到目标值:'|| v);
			 EXIT;
			 END IF;
	 END LOOP;

END;

Physisch:

Partitionierter Partitionsindex

分区键为id
partition by range (id)  
(
  partition part_1 values less than (5),
  partition part_2 values less than (10)
)
  • - Locally partitioned index(局部分区索引)
    局部分区索引随表对索引完成相应的分区(即索引会使用与底层表相同的机制分区),每个表分区都有一个索引分区,并且只索引该表分区。
    		Local prefixed index(局部前缀索引)
    			以分区键作为索引定义的第一列(分区键在第一列)
    			create index 自定义索引名 on 表名 (id, name) local;
    		Local nonprefixed index(局部非前缀索引)
                分区键没有作为索引定义的第一列(分区键没有在第一列)
                create index 自定义索引名 on 表名 (name, id) local;
    - Globally partitioned index(全局分区索引)
    针对整个表空间(全局)
    create index 自定义索引名 on 表名(age) global
    
    partition by range (age) 
    (
      partition index_part_1 values less than (20),
      partition index_part_2 values less than (maxvalue)
    )
    
    

Nicht partitionierter nicht partitionierter Index

B-Baum: Normaler B-Baum

CREATE INDEX语句时,默认就是在创建b-tree索引

Rever Key Reverse Transformation B Baum

反转了索引码中每列的字节,降低索引叶块的争用; 

Bitmap-Bitmap-Index

 含义:只有很少的索引条目,每个索引条目指向多行 
影响因素:
位图索引不适合并发环境,在并发环境下可能会造成大量事务的阻塞。
位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区
位图索引在读密集的环境中能很好地工作,但是对于写密集的环境则极不适合

 create bitmap index 自定义索引名 on 表名(列名); 

Oracle-Ansicht

** Bedeutung: ** Die Ansicht wird als virtuelle Tabelle bezeichnet und belegt keinen physischen Speicherplatz. Die in der Ansicht definierte Anweisung wird im Datenwörterbuch gespeichert und bei jeder Verwendung erneut ausgeführt.

Ansichten können Daten aus einer Tabelle oder mehreren zugehörigen Tabellen abrufen. Die erhaltene Tabelle wird als Basistabelle bezeichnet. Das Verschachteln von Ansichten kann ebenfalls vorgenommen werden

Die Ansicht verfügt über Funktionen zum Abfragen, Ändern, Hinzufügen und Löschen. Um die entsprechenden Berechtigungen zu erhalten, können Sie auch schreibgeschützt festlegen, um DML-Operationen zu blockieren.

Bemerkungen:

(Die Funktion von Gruppenfunktion, Gruppieren nach, Unterscheiden und Rownum in der Definitionsanweisung kann nicht zum Löschen von Daten verwendet werden.)

(In der Definitionsanweisung gibt es Gruppenfunktionen, Gruppierungs-, Unterscheidungs-, Rownum-Fake- und Minderwertigkeitselemente, und Spalten werden als Ausdrücke definiert und können die Funktion zum Ändern von Daten nicht verwenden.)

(Die Definitionsanweisung enthält Gruppenfunktionen, gruppiert nach, unterschiedliche, unzulässige Rownum-Shoddy-Elemente, Spaltendefinitionen sind Ausdrücke und nicht leere Spalten in der Tabelle sind nicht in der Ansichtsdefinition enthalten und können nicht zum Einfügen von Daten verwendet werden.)

** Erstellen Sie eine Ansicht: ** Erstellen Sie den Namen der Ansichtsansicht als Spaltennamen aus dem Tabellennamen unter Bedingungen

Abfrageansicht: Die SELECT-Spaltennamen aus dem Ansichtsnamen

** Ändern Sie die Ansicht: ** Erstellen oder ersetzen Sie den Namen der Ansichtsansicht als Spaltennamen aus dem Tabellennamen unter Bedingungen (ROWNUM kann nur <oder <= verwenden).

** DROP VIEW: ** Name der DROP VIEW-Ansicht

** Ansichtsdaten ändern: ** Ansichtsname aktualisieren, geänderte Spalte unter Bedingungen festlegen

** Ansichtsdaten löschen: ** Ansichtsnamen unter Bedingungen löschen

Oracle-Trigger

** Bedeutung: ** Trigger ist eine Technologie, die in relationalen Datenbanken bereitgestellt wird. Trigger in Oracle ähneln gespeicherten Prozeduren und Funktionen. Sie verfügen über SQL-Blöcke für die Deklaration und Ausführung sowie die Ausnahmebehandlung. Der einzige Unterschied zu gespeicherten Prozeduren und Funktionen besteht darin, dass gespeicherte Prozeduren und Funktionen vom Benutzer aufgerufen werden müssen, um ausgeführt zu werden, und Trigger ausgeführt von Das Ereignis wird gesteuert.

Trigger ähneln dem Auslösen und Auslösen. Ereignisse beziehen sich auf DML-Vorgänge in Basistabellen oder -ansichten und überwachen verschiedene Vorgänge in der Datenbank.

** DML-Trigger: ** Trigger vor oder nach dem DML-Betrieb

					create [or replace] trigger trigger_name
​							{before | after} trigger_event
​							on table_name
​							[for each row]
​							[when trigger_condition]
​							trigger_body

trigger_name:触发器名称

before | after : 指定触发器是在触发事件发生之前触发还暗示发生之后触发

trigger_event:触发事件,在DML触发器中主要为insert、update、delete等

table_name:表名,表示发生触发器作用的对象

for each row:指定创建的是行级触发器,若没有该子句则创建的是语句级触发器

when trigger_condition:添加的触发条件

trigger_body:触发体,是标准的PL/SQL语句块

Anstelle von Triggern : für den Betrieb mit einer oder mehreren Ansichten.

create [or replace] trigger trigger_name --触发器名称
instead of trigger_event --触发事件
on view_name --视图名称
for each row  --替代触发器必须指定为行级的触发器
[when trigger_condition] --触发条件
trigger_body --触发体,PL/SQL块

Systemauslöser: Wenn das System betrieben wird, wird es ausgelöst. Zum Beispiel: Schließen und Starten der Datenbank

Auslöser des Datenbanksystems

 CREATE OR REPLACE TRIGGER [sachema.]trigger_name

{BEFORE|AFTER} 
{ddl_event_list | database_event_list}
ON { DATABASE | [schema.]SCHEMA }
[WHEN condition]
PL/SQL_block | CALL procedure_name; 
 ddl_event_list:一个或多个DDL 事件,事件间用 OR 分开 ;database_event_list:一个或多个数据库事件,事件间用 OR 分开;

DDL-Operation:

grant(授权),
revoke(撤销授权),
create(创建),
drop(删除),
alter(修改),
comment(注释),
audit(审核),
rename(重命名)

Datenbankereignisse:

SET SERVEROUTPUT ON
DECLARE
 err_msg VARCHAR2(120);
BEGIN
 dbms_output.enable (1000000);
 FOR err_num IN 10000..10999
 LOOP
  err_msg := SQLERRM (-err_num);
  IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
   dbms_output.put_line (err_msg);
  END IF;
 END LOOP;
END;*
Veranstaltung Zeit erlaubt Beschreibung
ANLAUFEN NACH DEM Wird ausgelöst, nachdem die Datenbankinstanz gestartet wurde
HERUNTERFAHREN VOR Wird vor dem Schließen der Datenbankinstanz ausgelöst (nicht durch abnormales Herunterfahren ausgelöst)
SERVERFEHLER NACH DEM Wird nach einem Datenbankserverfehler ausgelöst
EINLOGGEN NACH DEM Wird nach erfolgreicher Anmeldung und Verbindung zur Datenbank ausgelöst
ABMELDEN VOR Wird ausgelöst, bevor die Datenbank getrennt wird
ERSTELLEN VORHER NACHHER Wird vor und nach dem Ausführen der CREATE-Anweisung ausgelöst, um das Datenbankobjekt zu erstellen
FALLEN VORHER NACHHER Wird vor und nach dem Ausführen der DROP-Anweisung ausgelöst, um Datenbankobjekte zu löschen
ÄNDERN VORHER NACHHER Wird vor und nach der Ausführung der ALTER-Anweisung ausgelöst, um Datenbankobjekte zu aktualisieren
DDL VORHER NACHHER Wird vor und nach der Ausführung der meisten DDL-Anweisungen ausgelöst
GEWÄHREN VORHER NACHHER Wird vor und nach dem Ausführen der GRANT-Anweisung ausgelöst, um Berechtigungen zu erteilen
WIDERRUFEN VORHER NACHHER Vor und nach der Ausführung der REVOKE-Anweisung, um die Erlaubnis zu erhalten, wird der Verstoß begangen
UMBENENNEN VORHER NACHHER Vor und nach der Ausführung der Anweisung RENAME, um den Namen des Datenbankobjekts zu ändern
AUDIT / NOAUDIT VORHER NACHHER Wird vor und nach der Durchführung des AUDIT- oder NOAUDIT-Audits oder dem Stoppen des Audits ausgelöst

Benutzer Flip-Flop

Benutzerauslöserabfrage:

SELECT NAME
FROM USER_SOURCE
WHERE TYPE='TRIGGER'
GROUP BY NAME 

Oracle-Transaktion

Isolationsschicht Falsch gelesen | schmutzig gelesen Nicht wiederholbares Lesen | Nicht wiederholbares Lesen Gefälschtes Lesen | Phantomlesen
READ UNCOMMITTED (nicht festgeschriebenes Lesen) Ja Ja Ja
LESEN SIE VERPFLICHTET Nein Ja Ja
Wiederholbares LESEN Nein Nein Ja
Serialisierbar (seriell gelesen) Nein Nein Nein

Oacle ist standardmäßig der zweite Typ, der zwei Arten des Übermittlungslesens und des seriellen Lesens unterstützt

1、set transaction :设置事物属性。

2、commit:提交事物。

3、rollback:回滚事物。

4、savepoint:设置保存点。

5、rollback to savepoint :回滚到保存点。
事物的类型
1、显式事物:顾名思义就是开发者主动控制事物的提交和回滚,可以利用命令来控制事物的提交,如:常见的PL/SQL语句块就是这种类型的事物。必须利用commit提交。

2、隐式事物:指的是oracle数据库自己控制事物的提交和回滚。比如oracle的DDL语句(create、drop、alter等)、DCL语句(grant、revoke)等都是一经执行直接持久化到数据库,不需要开发者自己手动提交。或者是DML语句在oracle数据库设置了自动提交:set autocommit on,也可以不需要主动提交就可以直接持久化到数据库。


SET TRANSACTION [ READ ONLY | READ WRITE ]
[ ISOLATION LEVEL [ SERIALIZE | READ COMMITED ]
[ USE ROLLBACK SEGMENT 'segment_name' ]
[ NAME 'transaction_name' ];
语法释义:
*EAD ONLY* - 可选的。 如果指定,它将事务设置为只读事务。
*READ WRITE* - 可选的。 如果指定,它将事务设置为读/写事务。
ISOLATION LEVEL
\- 可选的。 如果指定,它有两个选项:
`ISOLATION LEVEL SERIALIZE` - 如果事务尝试更新由另一个事务更新并未提交的资源,则事务将失败。
`ISOLATION LEVEL READ COMMITTED` - 如果事务需要另一个事务持有的行锁,则事务将等待,直到行锁被释放。
*USE ROLLBACK SEGMENT* - 可选的。 如果指定,它将事务分配给由`'segment_name'`标识的回退段,该段是用引号括起来的段名称。

*NAME* - 为`'transaction_name'`标识的事务分配一个名称,该事务用引号括起来。

Gespeicherte Oracle-Prozeduren

declare

​    说明部分

begin

​    语句序列(dml语句)

exception

​    例外处理语句

end;

Konstante:

char,varchar2,date,number,boolean,long

Referenzvariable:

pname test_procedure.name%type; -- 变量名:pname   test_procedure表中的name列的类型


declare 
  pname test_procedure.name%type;
  psal test_procedure.money%type;
begin
  
  select t.name,t.money
    into pname,psal       --往变量注入值 顺序必须一致
    from test_procedure t 
   where t.name = 'XX天';
  
  dbms_output.put_line('名字是:'||pname||',薪水是:'||psal);
end;

Datensatzvariable

emp_rec    TEST_PROCEDURE%rowtype   记录一行的类型,可以理解为一个数组。数组中的每一个元素就是一列。 

declare 
  tablerow test_procedure%rowtype;
begin

  select *
    into tablerow
    from test_procedure t 
   where t.name = 'XX天';

  dbms_output.put_line('名字是:'||tablerow.name||',薪水是:'||tablerow.money);

  dbms_output.put_line('职位是:'||tablerow.job||',薪水是:'||tablerow.dept);

end;

Konstante definieren

Konstante bezieht sich auf den Betrag, der sich nicht ändert

<常量名>constant<数据类型>:=<常量值>;
myname constant varchar(4):='sola';

Oracle-Paging

Physisches Paging

第一种:
SELECT * FROM  
(  
SELECT A.*, ROWNUM RN  
FROM (SELECT * FROM TABLE_NAME) A  
WHERE ROWNUM <= 40  
)  
WHERE RN >= 21  
第二种:
SELECT * FROM   
(  
SELECT temp.*, ROWNUM RN   
FROM (SELECT * FROM emp) temp   
)  
WHERE RN BETWEEN 10 AND 15

rownum不能以任何基表的名称作为前缀。 
子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。   

Registerkarte "Startseite":

当前页

数据总数=数据集合总数

总页数=数据总数%前台页数			|true  ||总页数=数据总数%前台页数+1  ||false   总页数=数据总数%前台页数

前台页数

首页

尾页
//当前页
private Integer current;

//总记录数
private Integer totalCount;

//总页数
private Integer sumPages;
//页面记录数
 private Integer pageSize; 

//判断是不是首页

  private Boolean isFirstPage = false;

判断是不是最后一页
  private Boolean isLastPage = false;
  private List<T> list;
  int startIndex = 0;
  int endIndex = 0;
  public PageList(List<T> list, Integer current, Integer pageSize) {
this.current = current;
this.pageSize = pageSize;
this.totalCount = list.size();
// 计算总页数
boolean isFullPages = totalCount % pageSize == 0;
if (!isFullPages) {
    // 若当前数据总数与页面数据大小相除不为整数,则增加一页显示剩余的数据
    this.sumPages = totalCount / pageSize + 1;
} else {
    this.sumPages = totalCount / pageSize;
}
startIndex = current * pageSize - pageSize;
if (current <= 0) {
    // 若查询的页数是小于等于0的则直接取第一页
   this.startIndex = 0;
   this.current = 1;
   endIndex = this.current * pageSize;
    // throw new ArithmeticException("当前页无法查询");
} else if (current > sumPages) {
    // 若查询的页数大于总页数,则置list为空
    list = new ArrayList<>();
} else if (current.equals(sumPages)) {
    endIndex = totalCount;
} else {
    endIndex = current * pageSize;
}
  // 判断是否为首页
    if (this.current == 1) {
        isFirstPage = true;
    }
 
    // 判断是否为最后一页
    if (this.current.equals(sumPages)) {
        isLastPage = true;
    }
 
    if (CollectionUtils.isEmpty(list)) {
        this.list = new ArrayList<>();
    } else {
        this.list = list.subList(startIndex, endIndex);
    }
}

Ich denke du magst

Origin blog.csdn.net/YHM_MM/article/details/105354261
Empfohlen
Rangfolge