Gibt es eine Alternative zu gespeicherten Prozeduren? [geschlossen]

7

Gibt es eine Alternative zu gespeicherten Prozeduren, sicheren und schnellen sowie gespeicherten Prozeduren? Ich kenne nur Hibernate. Gibt es andere Technologien wie diese?

    
dotjoe 06.10.2008, 17:27
quelle

8 Antworten

12

Gespeicherte Prozeduren sind ein Ort, an dem Code (SQL) abgelegt werden kann, der auf der Datenbank ausgeführt wird. Daher verstehe ich die Frage so:

Gibt es eine andere Möglichkeit, den Code, der auf der Datenbank ausgeführt wird, zu paketieren?

Es gibt mehrere Antworten:

  • Es gibt nichts anderes, das ziemlich dasselbe ist wie eine gespeicherte Prozedur, aber es gibt Alternativen, die Sie in Erwägung ziehen könnten.
  • Sie könnten Ihr gesamtes SQL als Zeichenfolgen in Ihrem Client-Code schreiben (Java oder was auch immer)
    • Dies hat jedoch verschiedene Probleme (Verlust der Einkapselung, enge Kopplung - & gt; härtere Wartung) und ist keine gute Idee.
  • Sie könnten ein ORM wie NHibernate verwenden, das eine Ebene zwischen Ihrer Client-Logik und der Datenbank einfügt. Der ORM generiert SQL, um auf der Datenbank ausgeführt zu werden. Mit einem ORM ist es schwieriger, komplexe Geschäftslogik als in einer gespeicherten Prozedur auszudrücken (generalisierende Generalisierung!).
  • Eine Art von "halfway house" ist es, Ihre eigene Datenzugriffsschicht (DAL) in Java zu definieren (oder watever, die Sie verwenden) und sie vom Hauptteil des Client-Codes getrennt zu halten (separate Klassen / Namespaces / etc.). Damit Ihr Client Anrufe an die DAL sendet, interpretiert die DAL diese und sendet SQL an die Datenbank, wobei die Ergebnisse von der Datenbank an den Client zurückgegeben werden.
AJ. 07.10.2008 09:50
quelle
7

Ja. Sie können dynamische SQL verwenden, aber ich persönlich mag gespeicherte Prozeduren besser.

1) Wenn Sie MS SQL Server verwenden, wird ein Abfrageplan erstellt, der die Ausführung der gespeicherten Prozedur schneller als einfache dynamische SQL ermöglichen soll.

2) Es kann einfacher und effektiver sein, einen Fehler in einer gespeicherten Prozedur zu beheben, insbesondere wenn Ihre Anwendung diese Prozedur an mehreren Stellen aufruft.

3) Ich finde es gut, die Datenbanklogik in der Datenbank zu kapseln und nicht in einer eingebetteten SQL- oder Anwendungskonfigurationsdatei.

4) Das Erstellen einer gespeicherten Prozedur in der Datenbank ermöglicht es dem SQL-Server, einige Syntax- und Validierungsprüfungen zur Entwurfszeit auszuführen.

    
Jeremy 06.10.2008 17:36
quelle
4

Hibernate ist ein Objekt / relationaler Persistenzdienst.

Gespeicherte Prozedur ist eine Subroutine in einem relationalen Datenbanksystem.

Nicht dasselbe.

Wenn Sie eine Alternative zum Ruhezustand möchten, können Sie nach iBatis für den Frühling

suchen     
Patrick Desjardins 06.10.2008 17:33
quelle
3

Sie können dynamisches SQL so sicher und schnell ausführen, wie gespeicherte Prozeduren sein können, es braucht nur etwas Arbeit. Natürlich braucht es etwas Arbeit, um gespeicherte Prozeduren sicher und schnell zu machen.

    
Lance Roberts 06.10.2008 17:32
quelle
2
  

Eine gespeicherte Prozedur ist eine Subroutine   verfügbar für Anwendungen, die auf a zugreifen   relationales Datenbanksystem. Gelagert   Prozeduren (manchmal als Proc bezeichnet,   sproc, StoPro oder SP) sind eigentlich   in den Datenbankdaten gespeichert   Wörterbuch.

     

Typische Verwendung für gespeicherte Prozeduren   inkl. Datenvalidierung (integriert   in die Datenbank) oder Zugriffskontrolle   Mechanismen. Darüber hinaus gespeichert   Verfahren werden verwendet, um zu konsolidieren und   Logik zentralisieren, die ursprünglich war   in Anwendungen implementiert. Groß oder   komplexe Verarbeitung, die erforderlich sein könnte   die Ausführung von mehreren SQL   Anweisungen werden in gespeichert verschoben   Verfahren und alle Anwendungen aufrufen   nur die Verfahren.

     

Gespeicherte Prozeduren sind ähnlich wie   benutzerdefinierte Funktionen (UDFs). Das   Hauptunterschied ist, dass UDFs sein können   benutzt wie jeder andere Ausdruck darin   SQL-Anweisungen, während gespeichert   Prozeduren müssen mit dem aufgerufen werden   CALL-Anweisung

.. von Wikipedia

Ich denke, Sie müssen diesen Artikel lesen und Ihre Frage neu gestalten. Hibernate hat nichts mit gespeicherten Procs zu tun.

    
pinku 18.09.2009 15:36
quelle
1

Es würde ein wenig mehr helfen, wenn Sie sagen würden, warum Sie nach Alternativen suchen, Was ist mit gespeicherten Procs, die du nicht magst?

Einige Datenbanken (zB PostgreSQL) erlauben Ihnen auch, gespeicherte Prozeduren zu schreiben verschiedene Sprachen. Also, wenn Sie wirklich wollen, können Sie sie in Python schreiben oder Java oder ähnliches anstelle von SQL.

    
Colin Coghill 21.09.2009 00:29
quelle
0

Hmm, scheint mir die offensichtliche Alternative zu gespeicherten Prozeduren zu sein, Anwendungscode zu schreiben. Anstatt beispielsweise eine Geschäftsprozedur zu schreiben, um jedes Mal, wenn ein Guthaben gebucht wird, ein Soll zu buchen, könnten Sie einen Anwendungscode schreiben, der beide schreibt.

Vielleicht bin ich hier zu einfach oder verpasse den Punkt der Frage.

    
Jay 14.08.2009 17:01
quelle
0

Ich denke, das OP bedeutet, dass eine Alternative zum Schreiben seines gesamten Datenbankcodes direkt in seinen Anwendungscode entweder gespeicherte Prozeduren aufrufen oder eine Trennungsschicht zwischen seinem Anwendungscode und der Datenbank mit einem ORM wie Hibernate, aber ja, einführen soll Sie sind sehr unterschiedliche Dinge.

Wenn Sie gespeicherte Prozeduren verwenden, können Sie SQL an einer Stelle getrennt von Ihrem Anwendungscode aufbewahren. Durch die Verwendung von Hibernate können Sie das vollständige Schreiben von SQL vermeiden und eine Objektdarstellung der relationalen Datenbank bereitstellen.

Welcher Weg Sie gehen, hängt viel von der Anwendung und Ihren eigenen Vorlieben ab.

    
Paul Taylor 05.07.2012 10:25
quelle

Tags und Links