jdbc batch processing
Dieses Tutorial bietet ein umfassendes Verständnis der JDBC-Stapelverarbeitung und der gespeicherten Java-Prozedur mit Beispiel-Java-Beispielen:
In dem JDBC-Ausnahmebehandlung Tutorial der JDBC-Tutorialserie Wir haben anhand von Programmierbeispielen gelernt, wie man mit SQL-Ausnahmen umgeht.
In diesem Tutorial werden Methoden zur Stapelverarbeitung in Java mithilfe des JDBC-Treibers erläutert. Wir werden auch lernen, wie man gespeicherte Prozeduren erstellt und von einem Java-Programm aus aufruft.
Beginnen wir mit dem Verständnis der Stapelverarbeitung und ihrer Vorteile.
Was du lernen wirst:
JDBC-Stapelverarbeitung
Hierbei werden mehrere SQL-Anweisungen in einer Transaktion ausgeführt. Dieser Prozess reduziert die Kommunikationszeit und erhöht die Leistung. Dies erleichtert die Verarbeitung großer Datenmengen erheblich.
Vorteile der Stapelverarbeitung
Die Stapelverarbeitung zielt darauf ab, die Leistung und Datenkonsistenz zu verbessern.
Performance
Stellen Sie sich das Szenario vor, in dem einer Tabelle aus einem JAVA-Programm mehrere (z. B. 5) Einträge hinzugefügt werden sollen. Der einfache Ansatz besteht darin, eine Verbindung zur Datenbank herzustellen, INSERT-Abfragen zu schreiben und jede Abfrage mit Statement oder PreparedStatement auszuführen.
Dieser Ansatz erhöht die Netzwerkauslösungen zur Datenbank und führt infolgedessen zu einer schlechten Leistung. Mit der Stapelverarbeitung können wir diesen Vorgang in einem Aufruf ausführen.
Datenkonsistenz
In einigen Fällen müssen wir Daten in mehrere Tabellen einfügen / aktualisieren. Dies führt zu einer zusammenhängenden Transaktion, bei der die Reihenfolge der eingefügten oder aktualisierten Abfragen wichtig ist. Alle Fehler, die während der Ausführung auftreten, führen zu einem Rollback der Daten, die gegebenenfalls durch vorherige Abfragen eingefügt wurden.
Beispiel:
# 1) Die Tabelle 'EMPLOYEE_DETAILS' enthält 3 Spalten: ICH WÜRDE , Name , und Rolle des Mitarbeiters.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
#zwei) Die Tabelle 'EMPLOYEE_ADDRESS' enthält zwei Spalten: EMP ID und Adresse
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
Im obigen Beispiel kann ein Problem auftreten, wenn die erste Anweisung erfolgreich ausgeführt wird, die zweite Anweisung jedoch fehlschlägt. In dieser Situation erfolgt kein Rollback der von der ersten Anweisung eingefügten Daten. Dies führt zu Dateninkonsistenzen.
Wir können Datenkonsistenz erreichen, indem wir die Transaktion am Ende festschreiben oder im Falle von Ausnahmen einen Rollback durchführen. Um dies zu erreichen, muss die DB jedoch für jede Anweisung wiederholt getroffen werden.
Andererseits werden bei der Stapelverarbeitung die Daten nur dann festgeschrieben, wenn alle Abfragen in einem Stapel erfolgreich ausgeführt werden. Andernfalls wird es nicht.
So führen Sie die Stapelverarbeitung durch
Wir können die Stapelverarbeitung mit den Methoden addbatch () und executeBatch () durchführen, die sowohl in den Klassen Statement als auch PreparedStatement verfügbar sind.
In diesem Tutorial sind alle Programme in Java geschrieben. Wir haben Java 8 Version und Oracle DB verwendet.
=> Klicken Sie hier, um die Oracle-Software herunterzuladen
=> Klicken Sie hier, um die Java-Version 8 herunterzuladen
Im folgenden Beispiel sehen wir, wie die Stapelverarbeitung ausführlich durchgeführt wird. Es verfügt über einen schrittweisen Java-Installationsprozess.
Daten in der EMPLOYEE-Tabelle vor dem Einfügen von Daten:
Warteschlangendatenstruktur c ++
Java-Programm
package com.STH.JDBC; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ExecuteBatch_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { //Inserting the data in EMPLOYEE Table using the following query String insert_query1 = 'insert into employee values(?,?,?)'; Class.forName('oracle.jdbc.driver.OracleDriver'); Try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query1); //Setting values for the 1st person in EMPLOYEE Table pstatemnt1.setInt(1,10001); pstatemnt1.setString(2, 'Bush'); pstatemnt1.setString(3, 'William '); //Adding the 1st insert query into batch pstatemnt1.addBatch(); //Setting values for the 2nd person in EMPLOYEE Table pstatemnt1.setInt(1,10002); pstatemnt1.setString(2, “Bush'); pstatemnt1.setString(3, 'George'); //Adding the 2nd insert query into batch pstatemnt1.addBatch(); //Setting values for the 3rd person in EMPLOYEE Table pstatemnt1.setInt(1,10003); pstatemnt1.setString(2, 'Bond'); pstatemnt1.setString(3, 'James'); //Adding the 3rd insert query into batch pstatemnt1.addBatch(); //Executing the executeBatch method int No_of_Afffected_Rows()= pstatemnt1.executeBatch(); //After inserting the data, displaying no. of rows affected System.out.println('No of rows affected = ' +No_of_Afffected_Rows.length);} catch (SQLException e) { e.printStackTrace();} } }
AUSGABE:
Daten in der EMPLOYEE-Tabelle nach dem Einfügen der Daten:
Erläuterung:
Im obigen Programm haben wir Daten von 3 Mitarbeitern in einem Anruf im Batch-Betrieb eingefügt.
- Erstellen Sie eine Einfügeabfrage, um die Spaltenwerte zu übergeben.
- Öffnen Sie die Verbindung, erstellen Sie mit dem Verbindungsobjekt ein prepareStatement-Objekt und rufen Sie die prepareStatement-Methode auf.
- Stellen Sie dann die Werte für 1 einstMitarbeiter, der setXXX-Methoden verwendet, und rufen Sie die Methode addBatch () auf, um die neue Zeile im Stapel hinzuzufügen.
- Fügen Sie auf diese Weise die Werte für 2 hinzundund 3rdAngestellte. Nach dem Hinzufügen der Abfragen zur addBatch () -Methode sollten wir die executeBatch () -Methode mit dem prepareStatement-Objekt aufrufen.
- Die Methode executeBatch () fügt die Daten der 3 Mitarbeiter in einem Aufruf ein.
- Überprüfen Sie in der Tabelle EMPLOYEE, ob die Daten ordnungsgemäß eingefügt wurden oder nicht.
Gespeicherte Java-Prozeduren
Eine gespeicherte Prozedur ist eine Gruppe von SQL-Anweisungen, die eine einzelne Einheit bilden und eine bestimmte Aufgabe ausführen. Sie werden verwendet, um eine Reihe von Vorgängen oder Fragen auszuführen, die auf einem Datenbankserver ausgeführt werden sollen. Es kann mit verschiedenen Parametern und Ergebnissen kompiliert und ausgeführt werden.
Jede Prozedur hat ihren eindeutigen Namen, auf den verwiesen werden soll. Diese Unterprogrammeinheit wird als Datenbankobjekt in der DB gespeichert.
Ein Unterprogramm ist nichts anderes als eine Prozedur und sollte manuell nach Belieben erstellt und als DB-Objekt gespeichert werden.
Gespeicherte Prozeduren sind eigenständige Blöcke eines Programms, die wir in der Datenbank speichern können. Mit dem Namen der gespeicherten Prozedur können wir sie aufrufen und ausführen. Es wird hauptsächlich verwendet, um einen Prozess in PL / SQL auszuführen. Die Prozedur kann verschachtelte Blöcke haben oder in den anderen Blöcken verschachtelt sein.
Die gespeicherte Prozedur besteht aus 3 Teilen:
- Deklarationsteil (optional): In diesem Teil können wir die Variablen, Konstanten, Cursor usw. deklarieren. Dies ist ein optionaler Teil. Basierend auf den Anforderungen können wir es verwenden.
- Ausführungsteil: Dieser Teil enthält die Hauptgeschäftslogik des Verfahrens. Normalerweise enthält es einen Block mit SQL-Anweisungen.
- Außergewöhnliches Handhabungsteil (optional): In diesem Teil können wir die Ausnahme behandeln, die aufgrund des Ausführungsteilcodes auftreten kann. Es ist auch optional.
Basierend auf den Anforderungen können wir eine Prozedur erstellen. Wir können die Werte aus den Parametern übergeben oder abrufen.
In gespeicherten Prozeduren stehen drei Arten von Parametern zur Verfügung. Sie sind:
- IM: Es wird verwendet, um den Eingabewert an die gespeicherte Prozedur zu übergeben. Die gespeicherte Prozedur verwendet den Eingabeparameter im Programm als schreibgeschützte Variable. Der Wert kann innerhalb der Unterprogramme nicht geändert werden. Oracle verwendet IN als Standardmodus für den Parameter. Dies ist der Standardparameter.
- AUS: Es wird verwendet, um den Wert nach der Ausführung von der gespeicherten Prozedur zurückzugeben oder abzurufen. Es ist eine Lese- / Schreibvariable innerhalb der Unterprogramme. Der Wert kann innerhalb der Unterprogramme geändert werden.
- IN / OUT: Es wird verwendet, um die Eingabewerte an die gespeicherte Prozedur zu übergeben und die Werte auch von der Prozedur zurückzugeben oder abzurufen. Es ist sowohl lesbar als auch beschreibbar. Wir können es lesen und ändern.
RÜCKKEHR
Wir werden das Schlüsselwort return verwenden, um die Steuerung an das Hauptprogramm wie das Java-Programm zurückzugeben. Wenn die Prozedur das Schlüsselwort RETURN findet, verlässt sie die Ausführung und überspringt den Code oder die Anweisung danach.
So rufen Sie gespeicherte Prozeduren von Java aus auf
Wir haben eine CallableStatement-Schnittstelle in Java, um Stored Procedure aufzurufen. Das CallableStatement-Schnittstellenobjekt kann mit der prepareCall () -Methode der Connection-Schnittstelle erstellt werden. Danach sollten wir die executeQuery () -Methode aufrufen, um die gespeicherte Prozedur in Java auszuführen.
Bevor wir das Java-Programm schreiben, um dies zu implementieren, sollten wir gespeicherte Prozeduren erstellen, um es im Programm zu verwenden.
Die Syntax zum Aufrufen gespeicherter Prozeduren im Java-Programm lautet wie folgt:
Syntax | Anzahl der Parameter |
---|---|
{PROCEDURE_NAME () aufrufen} | Keine Eingabeparameter und keine Ausgabeparameter |
{PROCEDURE_NAME (?,?,?) aufrufen} | Drei Eingabeparameter und keine Ausgabeparameter |
{? = PROCEDURE_NAME () aufrufen} | Keine Eingabeparameter und ein Ausgabeparameter (RETURN-Wert) |
{? = Aufruf von PROCEDURE_NAME (?,?)} | Zwei Eingabeparameter und ein Ausgabeparameter (RETURN-Wert) |
Schritte zum Erstellen gespeicherter Prozeduren
# 1) Erstellen Sie die Prozedur auf dem DB-Server. Hier verwenden wir Oracle DB.
# 2) Syntax zum Erstellen der vollständigen Prozedur:
Wir können die gespeicherte Prozedur auch in Java-Code schreiben.
#3) Übergeben Sie die Parameter IN und OUT, um sie in der Prozedur zu verwenden.
# 4) Das Schlüsselwort AS / IS sollte erwähnt werden. Wenn wir der neuen Prozedur eine weitere Prozedur hinzufügen, verwenden Sie das Schlüsselwort IS oder das Schlüsselwort AS, wenn die Prozedur eigenständig ist.
# 5) Deklarieren Sie die Variablen, es ist nicht obligatorisch, basierend auf der Anforderung, die wir erstellen können.
# 6) BEGINNEN Sie dann die Prozedur mit dem Schlüsselwort BEGIN und schreiben Sie die SQL-Anweisungen oder Abfragen, die in der Prozedur ausgeführt werden sollen.
# 7) Als nächstes können wir die Ausnahme im Ausnahmeteil behandeln. Es ist auch nicht zwingend zu erwähnen.
# 8) Beenden Sie die Prozedur, indem Sie das Schlüsselwort END und den Namen der Prozedur angeben.
Wir können die Prozedur in Oracle erstellen und unter einem eindeutigen Namen speichern und diese Prozedur aus dem Java-Programm aufrufen. Wir können die Prozedur erstellen und diese Prozedur auch in Java aufrufen.
Erstellen Sie eine Prozedur in Oracle, speichern Sie sie und rufen Sie die Prozedur in Java Program auf.
# 1) Öffnen Sie den Datenbankserver. Hier verwenden wir den Oracle DB-Server.
#zwei) Klicken Sie mit der rechten Maustaste auf den Ordner 'Prozedur' und klicken Sie auf die Option 'Neue Prozedur'.
beste Software zum Entfernen von Malware und Spyware
#3) Es wird nach dem Namen der Prozedur und den Parameterdetails gefragt.
Hinweis: Wir können die Parameterdetails auch beim Schreiben der Prozedur angeben.
# 4) Schreiben Sie die Prozedur mit den Schritten, die wir bereits in diesem Tutorial besprochen haben, und speichern Sie die Prozedur unter dem eindeutigen Namen.
Die Prozedur im Screenshot zeigt die Ausgabe in DB an. Wir können es ändern, um es auch im Java-Programm anzuzeigen. Dafür müssen wir OUT-Parameter verwenden.
# 5) Führen Sie die Prozedur aus, indem Sie auf die Schaltfläche Ausführen klicken
# 6) Geben Sie den Wert in die Spalte Eingabewert ein. Es werden die Daten für den angegebenen Wert angezeigt.
Bisher haben wir gesehen, wie die Prozedur in der DB-Konsole selbst erstellt und ausgeführt wird.
Erstellen Sie die Prozedur in DB. Rufen Sie es auf und zeigen Sie die Daten in der Java-Konsole an .
Erstellen Sie die folgende Prozedur mit den obigen Schritten und speichern Sie sie unter dem Namen 'DISPLAY_EMPLOYEE_DETAILS'.
Beispielprogramm für gespeicherte Java-Prozeduren
package com.STH.JDBC; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class StoredProcedureExample { public static void main(String() args) throws ClassNotFoundException { Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB Try (Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { // Creating prepared Statement CallableStatementCallStmt = conn.prepareCall('{call DISPLAY_EMPLOYEE_DETAILS(?,?,?,?)}'); //Passing Input Parameter CallStmt.setInt(1,1001); //Retrieving the Output Parameters values CallStmt.registerOutParameter(2, java.sql.Types.VARCHAR); CallStmt.registerOutParameter(3, java.sql.Types.VARCHAR); CallStmt.registerOutParameter(4, java.sql.Types.VARCHAR); //Calling the execute to execute the procedure and retrieve the data CallStmt.execute(); System.out.println('First Name: '+ CallStmt.getString(2)+'
Last Name: '+ CallStmt.getString(3) + '
Email: ' + CallStmt.getString(4)); }catch (SQLException e) { e.printStackTrace(); } } }
AUSGABE:
Erläuterung:
Im obigen Programm haben wir eine Prozedur erstellt und in Oracle DB gespeichert. Rief diese Prozedur dann mit CallableStatement auf und zeigte die Daten in der Java-Konsole an.
- Erstellen Sie die Prozedur und speichern Sie sie in Oracle DB.
- Öffnen Sie im Java-Programm die DB-Verbindung und rufen Sie die prepareCall-Methode mit den Objekten connection und CallableStatement auf.
- Übergeben Sie den Eingabeparameterwert mit der setXXX-Methode.
- Rufen Sie die Ausgabeparameterwerte mit der Methode registerOutParameter ab. Bei dieser Methode sollten wir den Parameterindexwert und den Datentyp des Parameters übergeben. Die Werte werden im Parameterindex gespeichert.
- Mit den getXXX-Methoden können wir die Daten abrufen und in der Java-Konsole anzeigen.
Erstellen Sie die Prozedur und führen Sie sie im Java-Programm selbst aus.
Java-Programm
package com.STH.JDBC; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; public class StoredProcedureExample1 { public static void main(String() args) throws ClassNotFoundException { String Stored_Procedure = 'CREATE OR REPLACE PROCEDURE UPD_EMPLOYEE_DETAILS
' +'(
' + ' PARAM1 IN NUMBER,
' + ' PARAM2 IN NUMBER
'+ ') IS
'+ ' BEGIN
'+ 'UPDATE EMPLOYEE_DETAILS SET EMPNUM= PARAM2 WHERE EMPNUM = PARAM1;
'+ 'COMMIT;
'+ 'END UPD_EMPLOYEE_DETAILS;
'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) {// Creating prepared Statement Statement stmt = conn.createStatement(); CallableStatementCallStmt = conn.prepareCall('{call UPD_EMPLOYEE_DETAILS(?,?)}'); stmt.execute(Stored_Procedure); //Setting the values to pass the procedure CallStmt.setInt(1,1010); CallStmt.setInt(2, 10010); //Calling executeUpdate method to update the values using Procedure CallStmt.executeUpdate(); System.out.println(' Successfully Updated ' ); } catch (SQLException e) { e.printStackTrace(); } } }
AUSGABE:
Daten in der Tabelle Employee_details vor der Ausführung des Programms:
Daten in der Tabelle Employee_details nach Ausführung des Programms:
Erläuterung:
Im obigen Programm speichern wir den Prozedurcode als Zeichenfolge.
String Stored_Procedure = 'CREATE OR REPLACE PROCEDURE UPD_EMPLOYEE_DETAILS
' +'(
' +' PARAM1 IN NUMBER,
' +' PARAM2 IN NUMBER
'+ ') IS
'+' BEGIN
'+'UPDATE EMPLOYEE_DETAILS SET EMPNUM= PARAM2 WHERE EMPNUM = PARAM1;
'+'COMMIT;
'+'END UPD_EMPLOYEE_DETAILS;
';
- Öffnen Sie die Oracle DB-Verbindung und erstellen Sie das Anweisungsobjekt mit dem Verbindungsobjekt.
- Rufen Sie die Methode createStatement mit dem Anweisungsobjekt auf, da wir die Prozedur in Java-Code erstellen.
- Rufen Sie die Prozedur mithilfe der Syntax auf {UPD_EMPLOYEE_DETAILS aufrufen (?,?) zur Vorbereitung der Call-Methode des CallableStatement.
- Da wir die Prozedur in Java-Code erstellen, müssen wir diesen 'Prozedurcode erstellen' ausführen.
- Um diese Prozedur auszuführen, rufen Sie die Methode execute mit dem Anweisungsobjekt „ stmt.execute (Stored_Procedure) ”. Dadurch wird die Prozedur vorübergehend in der Datenbank erstellt.
- Der Umfang der Prozedur ist das Ende der Ausführung des Programms. Danach ist es nicht mehr verfügbar. Legen Sie mit den setXXX-Methoden die zu aktualisierenden Werte in der Tabelle Employee_Details fest.
- Rufen Sie die Methode executeUpdate mit dem Objekt callableStatement auf. Diese Methode aktualisiert die Werte in der Empoyee_Details-Geschichte.
- Überprüfen Sie in der Tabelle Employee_details, ob die Daten ordnungsgemäß aktualisiert wurden.
Punkte, die man sich merken sollte:
- Die Stapelverarbeitung verbessert die Leistung und sorgt für Datenkonsistenz.
- Das Ausführen mehrerer SQL-Anweisungen in einer Transaktion wird als Stapelverarbeitung bezeichnet.
- Die gespeicherte Prozedur ist der Block von SQL-Anweisungen, die zum Ausführen der Geschäftslogik verwendet werden.
- Wir können den Eingabeparameter mit dem Schlüsselwort IN an die Prozedur und das Schlüsselwort OUT für den Ausgabeparameter übergeben.
- Wir können eine Prozedur auf dem DB-Server selbst erstellen und vorübergehend auch Java-Code verwenden.
Häufig gestellte Fragen
F # 1) Welche Schnittstelle sollte verwendet werden, um die Stapelverarbeitung in JDBC durchzuführen?
Antworten: Das Java-Paket verfügt über die Schnittstellen Statement und PreparedStatement, die die Methoden für die Stapelverarbeitung bereitstellen.
F # 2) Wie funktionieren Stapelaktualisierungen in JDBC?
Antworten: Ein JDBC-Batch-Update besteht aus einer Reihe von Updates, die gruppiert und auf einmal an die Datenbank gesendet werden, anstatt die Updates einzeln zu senden. Dadurch wird der Netzwerkverkehr in der Datenbank reduziert.
F # 3) Wie erhöht die Stapelverarbeitung die Leistung?
Antworten: Die Stapelverarbeitung sendet die Daten gleichzeitig (nur 1 Roundtrip) an die Datenbank, anstatt sie einzeln zu senden, und die Datenbank kann möglicherweise einige Anweisungen parallel ausführen. Auf diese Weise wird die Leistung der Anwendung erhöht und Zeit gespart.
F # 4) Welche Parameter werden in gespeicherten Prozeduren in JDBC akzeptiert?
Antworten: Es gibt drei Arten von Parametern: IN-, OUT- und INOUT-Parameter. Der Parameter IN dient zum Abrufen des Eingabewerts. Der OUT-Parameter dient zum Abrufen des Ausgabewerts. Der Parameter INOUT wird sowohl für die Eingabe als auch für die Ausgabe verwendet.
F # 5) Welche Methoden stehen zur Verfügung, um eine gespeicherte Prozedur in JDBC auszuführen?
Antworten: Über die CallableStatement-Schnittstelle können wir die Prozedur aufrufen. Die CallableStatement-Schnittstelle bietet drei Methoden zum Ausführen der gespeicherten Prozeduren.
Die drei Methoden sind:
- executeUpdate (): Verwenden Sie diese Methode, wenn die Prozedur keine Rückgabewerte zurückgibt.
- executeQuery (): Verwenden Sie diese Methode, wenn die Prozedur nur eine Ergebnismenge zurückgibt.
- ausführen(): Verwenden Sie diese Methode, wenn die Prozedur viele Ergebnismengen oder eine unbekannte Anzahl von Ergebnismengen zurückgibt.
Fazit
In diesem Lernprogramm haben wir die Stapelverarbeitung und gespeicherte Prozeduren behandelt. In der modernen Welt sind hohe Leistung, Datenkonsistenz und Wiederverwendbarkeit die Schlagworte für jede beliebte Anwendung. Sowohl die Stapelverarbeitung als auch gespeicherte Prozeduren spielen eine sehr wichtige Rolle bei der Implementierung dieser Funktionen. Das Wissen darüber ist für jeden Softwareentwickler unvermeidlich.
Literatur-Empfehlungen
- Java JDBC Tutorial: Was ist JDBC (Java Database Connectivity)
- Java JDBC-Verbindungs-Tutorial mit Programmierbeispiel
- Java JDBC Transaction Management mit Beispiel
- JDBC ResultSet: Verwendung von Java ResultSet zum Abrufen von Daten
- Behandlung von JDBC-Ausnahmen - Umgang mit SQL-Ausnahmen
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JAVA-Tutorial für Anfänger: Über 100 praktische Java-Video-Tutorials