DECLARE
p_EMPNO number(4) := 0;
p_ENAME varchar2(10) := 'Test';
p_AENDERUNGSZEITSTEMPEL timestamp(6) := sysdate;
p_AENDERUNGSKENNZEICHEN varchar2(2) := 'I';
BEGIN
FOR i IN 1 .. 100 LOOP
p_EMPNO := p_EMPNO + 1;
INSERT
INTO CT_EMP1
(
EMPNO,
ENAME,
AENDERUNGSZEITSTEMPEL,
AENDERUNGS_KENNZEICHEN
)
VALUES
(
p_EMPNO,
p_ENAME,
p_AENDERUNGSZEITSTEMPEL,
p_AENDERUNGSKENNZEICHEN
);
END LOOP for_loop;
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
raise_application_error (-20001,'Fehler beim Insert durch Schluesselverletzung.');
WHEN OTHERS THEN
dbms_output.put_line('Fehler beim Ausfuehren des Kommandos.');
RAISE;
END;
Hier ein weiterer Link zur automatischen Testdatengenerierung:
https://www.besserdich.com/oracle/scripting/testdatengenerierung-zeilen-generator-row-generator-in-oracle/
Donnerstag, 10. September 2015
Donnerstag, 26. März 2015
Dynamisch mit dem DBMS_SQL-Package
DECLARE
--
v_Cursor NUMBER;
v_CmdString VARCHAR2(5000);
v_Ret INTEGER;
--
BEGIN
--
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_CmdString := 'rename EMP to emp_tmp';
DBMS_SQL.PARSE(v_Cursor, v_CmdString, DBMS_SQL.NATIVE);
v_Ret := DBMS_SQL.EXECUTE(v_Cursor);
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
DBMS_OUTPUT.PUT_LINE('Fehler beim Ausfuehren des Kommandos');
RAISE;
--
END;
/
http://www.java2s.com/Tutorial/Oracle/0601__System-Packages/AnexampleofusingDBMSSQLOPENCURSOR.htm
http://www.java2s.com/Code/Oracle/System-Packages/FirstDBMSSQLExample.htm
http://docstore.mik.ua/orelly/oracle/bipack/ch02_05.htm
http://psoug.org/reference/dbms_sql.html
--
v_Cursor NUMBER;
v_CmdString VARCHAR2(5000);
v_Ret INTEGER;
--
BEGIN
--
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_CmdString := 'rename EMP to emp_tmp';
DBMS_SQL.PARSE(v_Cursor, v_CmdString, DBMS_SQL.NATIVE);
v_Ret := DBMS_SQL.EXECUTE(v_Cursor);
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
DBMS_OUTPUT.PUT_LINE('Fehler beim Ausfuehren des Kommandos');
RAISE;
--
END;
/
Links
http://www.toadworld.com/products/toad-for-oracle/w/toad_for_oracle_wiki/231.dbms-sql-vs-execute-immediate.aspxhttp://www.java2s.com/Tutorial/Oracle/0601__System-Packages/AnexampleofusingDBMSSQLOPENCURSOR.htm
http://www.java2s.com/Code/Oracle/System-Packages/FirstDBMSSQLExample.htm
http://docstore.mik.ua/orelly/oracle/bipack/ch02_05.htm
http://psoug.org/reference/dbms_sql.html
Mittwoch, 25. März 2015
SQL mal wieder ein wenig dynamischer
declare
procedure run(p_sql varchar2) as
begin
execute immediate p_sql;
end;
begin
run('rename EMP to emp_tmp');
run('rename emp_tmp to emp');
end;
http://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen
procedure run(p_sql varchar2) as
begin
execute immediate p_sql;
end;
begin
run('rename EMP to emp_tmp');
run('rename emp_tmp to emp');
end;
Dazu noch ein paar nützliche Informationen:
http://use-the-index-luke.com/de/sql/mythen/dynamisches-sql-ist-langsamhttp://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen
Dienstag, 3. März 2015
Join über vier Tabellen
Dieses Beispiel beruht auf dem SQL - Wikipedia ER-Diagramm:
http://de.wikipedia.org/wiki/SQL#Sprachelemente_und_Beispiele
Um anzuzeigen, welche Vorlesungen die Studenten besuchen und deren zugeordnete Professoren, kann diese Abfrage verwendet werden:
select s.matrnr
, s.name
, v.vorlnr
, v.titel
, p.persnr
, p.name
from Student s, hoert h, Vorlesung v, Professor p
where s.matrnr = h.matrnr
and h.vorlnr = v.vorlnr
and v.persnr = p.persnr
order by 2
MATRNR NAME VORLNR TITEL PERSNR NAME
26120 Fichte 5001 ET 15 Tesla
26120 Fichte 5045 DB 12 Wirth
25403 Jonas 5001 ET 15 Tesla
http://www.dba-oracle.com/tips_oracle_left_outer_join.htm
http://de.wikipedia.org/wiki/SQL#Sprachelemente_und_Beispiele
Um anzuzeigen, welche Vorlesungen die Studenten besuchen und deren zugeordnete Professoren, kann diese Abfrage verwendet werden:
select s.matrnr
, s.name
, v.vorlnr
, v.titel
, p.persnr
, p.name
from Student s, hoert h, Vorlesung v, Professor p
where s.matrnr = h.matrnr
and h.vorlnr = v.vorlnr
and v.persnr = p.persnr
order by 2
MATRNR NAME VORLNR TITEL PERSNR NAME
26120 Fichte 5001 ET 15 Tesla
26120 Fichte 5045 DB 12 Wirth
25403 Jonas 5001 ET 15 Tesla
Hier noch ein Beispiel zum Left Outer Join (wg. BURLESON Consulting):
http://www.dba-oracle.com/tips_oracle_left_outer_join.htm
Dienstag, 16. Dezember 2014
Dynamisch Tabellen abfragen und Datensätze zählen
set serveroutput on
--
DECLARE
CURSOR c_trig IS
SELECT table_name
FROM tabs
WHERE 1=1
AND table_name like 'T_%'
;
v_zaehler number;
BEGIN
FOR r IN c_trig
LOOP
-- execute immediate 'TRUNCATE TABLE '||r.table_name;
execute immediate 'select count(*) from ' || r.table_name into v_zaehler;
DBMS_OUTPUT.PUT_LINE(r.table_name || ' : ' || v_zaehler);
END LOOP;
END;
/
--
DECLARE
CURSOR c_trig IS
SELECT table_name
FROM tabs
WHERE 1=1
AND table_name like 'T_%'
;
v_zaehler number;
BEGIN
FOR r IN c_trig
LOOP
-- execute immediate 'TRUNCATE TABLE '||r.table_name;
execute immediate 'select count(*) from ' || r.table_name into v_zaehler;
DBMS_OUTPUT.PUT_LINE(r.table_name || ' : ' || v_zaehler);
END LOOP;
END;
/
Freitag, 28. November 2014
For-Cursor-Loop
DECLARE
v_aenderungszeitstempel TIMESTAMP(6);
BEGIN
FOR cur IN (select table_name
from tabs
where table_name like 'CT_%'
and table_name not like 'CT_D_%'
and table_name not like 'CT_PROT_%') LOOP
execute immediate 'SELECT max (aenderungszeitstempel) FROM ' || cur.table_name INTO v_aenderungszeitstempel;
DBMS_OUTPUT.put_line('max Aenderungszeitstempel der Tabelle ' || cur.table_name || ': ' || v_aenderungszeitstempel);
END LOOP;
END;
v_aenderungszeitstempel TIMESTAMP(6);
BEGIN
FOR cur IN (select table_name
from tabs
where table_name like 'CT_%'
and table_name not like 'CT_D_%'
and table_name not like 'CT_PROT_%') LOOP
execute immediate 'SELECT max (aenderungszeitstempel) FROM ' || cur.table_name INTO v_aenderungszeitstempel;
DBMS_OUTPUT.put_line('max Aenderungszeitstempel der Tabelle ' || cur.table_name || ': ' || v_aenderungszeitstempel);
END LOOP;
END;
einfache Queries
select table_name
from tabs
where table_name like 'T_%'
and table_name not like 'T_D_%'
and table_name not like 'T_PRO_%'
;
from tabs
where table_name like 'T_%'
and table_name not like 'T_D_%'
and table_name not like 'T_PRO_%'
;
Abonnieren
Posts (Atom)