sql >> Databasteknik >  >> RDS >> Oracle

Vad är PL/SQL-lagrade procedurer i Oracle Database

I likhet med PL/SQL-funktioner är en lagrad procedur en fristående underprogram som är avsett att utföra vissa specifika uppgifter. Också liknande funktioner kallas procedurer PL/SQL-block, så de kan återanvändas eftersom de lagras i databasen som ett databasobjekt. Men till skillnad från PL/SQL-funktioner returnerar inte en lagrad procedur något värde .

Syntax för lagrade PL/SQL-procedurer

CREATE [OR REPLACE] PROCEDURE pro_name (Parameter – List)
IS [AUTHID 	DEFINER | CURRENT_USER]
	Declare statements
BEGIN
	Executable statements 
END procedure name;
/ 

Ovanstående syntax för PL/SQL lagrad procedur är ganska lik syntaxen för PL/SQL-funktioner som vi såg i den senaste PL/SQL-handledningen. Förutom två saker:

  1. Det finns ingen returklausul.

En kärnskillnad mellan en PL/SQL-funktion och en lagrad procedur är att till skillnad från funktioner returnerar en lagrad procedur inget värde.

  1. AUTHID-klausul.

AUTHID-satsen används för att ställa in auktoritetsmodellen för PL/SQL-procedurerna. Denna sats har två flaggor.

  1. DEFINER och
  2. CURRENT_USER

Eftersom den här klausulen är valfri, så om du inte använder AUTHID-klausulen kommer Oracle Engine att ställa in auktoriteten (AUTHID) till DEFINER som standard för dig. Nu måste du undra vad dessa DEFINER- och CURRENT_USER-rättigheter är?

DEFINER höger: Definer right är standardrättigheten som tilldelats proceduren av Oracle Engine. Denna rättighet innebär att alla med Execution Privilege på proceduren agerar som om de är ägare till schemat där privilegiet skapas.

CURRENT_USER höger: Att ställa in auktoritetsnivån för en lagrad procedur till den aktuella_användarrättigheten åsidosätter standardrättigheten som definieras och ändrar den till anroparrättigheterna.

Invoker-rättigheter innebär att du anropar proceduren för att agera på din lokala data och det kräver att du replikerar dataobjekt i alla deltagande scheman.

Några extra poäng om lagrad procedur

  • Du kan definiera en procedur med eller utan formella parametrar.
  • En parameter kan vara antingen pass-by-value eller pass-by-referens .
  • En procedur kommer att vara en procedur för pass-by-value när du inte anger parameterläget eftersom det använder standardläget IN.

Det är det på Introduktion till PL/SQL-lagrade procedurer. Jag antar att du också kommer att njuta av att läsa dessa nedan nämnda bloggar. Alla bloggar är skrivna genom att ta jobbintervju och Oracle Database Certification i åtanke, se till att kolla in dem.

  • Skillnader mellan PL/SQL-funktion och PL/SQL-lagrade procedurer?
  • Vad är parameterlägen i PL/SQL-funktioner och -procedurer?
  • Vad är formella och faktiska parametrar?

Kom alltid ihåg:Du kan hjälpa andra att lära och stödja mig och min kanal samt den här bloggen genom att dela den med dina vänner på dina sociala medier.

Det är det killar. Tack för att du läser. Ta hand om dig och ha en bra dag!


  1. Kan den Oracle-hanterade drivrutinen använda async/wait korrekt?

  2. Vänd i Oracle denna väg z/y/x till x/y/z

  3. Hur man optimerar PostgreSQL logisk replikering

  4. i postgres, kan du ställa in standardformateringen för en tidsstämpel, efter session eller globalt?