2017-05-25 5 views
0

Ich möchte ein Wörterbuchobjekt in Plsql erstellen. (11g) Dictionary-Objekt wird drei Felder haben: employee_id, manager_id, Dauer Ich möchte keine Tabelle wegen der Abfragezeiten erstellen. Ich möchte auf Gegenstände im Widder zugreifen.Verwenden von Wörterbüchern (ähnlich wie Python dict)

Ich werde 2 Millionen Zeilen in dieses Dictionary-Objekt einfügen, indem Sie Bulk Collect verwenden. Dann möchte ich wie Dictionay Objekt zuzugreifen: (334 Mitarbeiter id) dictEmp [334] .manager_id = 8 oder Rückkehr dictEmp [334] .duration

Können Sie jedes Dokument vorschlagen? Dank

+0

Sieht sehr viel wie ein Job für eine [temporäre Tabelle] (http://www.dba-oracle.com/t_temporary_tables_sql.htm). – 9000

+0

Erstellen Sie "dict" Karten für Ihre Objekte für jeden Index, den Sie brauchen, und seien Sie auf Ihrem Heiratsweg. Komplizieren Sie es nicht mit zusätzlichen Strukturen, da Sie keine bessere Leistung als die native Python 'dict'-Suche erhalten. – zwer

+0

So etwas wie [das] (https://repl.it/IRaL/2)? – Olian04

Antwort

0

Klingt wie ein assoziatives Array in PL/SQL.

declare 
    type employee_t is table of emp_demo%rowtype index by pls_integer; 
    l_employees employee_t; 
begin 
    for r in (
     select * from emp_demo 
    ) 
    loop 
     l_employees(r.employee_id) := r; 
    end loop; 

    dbms_output.put_line('Manager for employee 334 is: ' || l_employees(334).manager_id); 

    dbms_output.put_line('Manager''s manager is ' || l_employees(l_employees(334).manager_id).employee_name); 
end; 

Testdaten:

create table emp_demo 
(employee_id integer primary key 
, employee_name varchar2(40) 
, manager_id integer 
, hiredate date 
, duration integer); 

insert all 
    into emp_demo values (8, 'Clark', 5, date '2015-04-02', 18) 
    into emp_demo values (334, 'Jones', 8, date '2015-01-05', 12) 
    into emp_demo values (455, 'Smith', 7, date '2015-02-04', 14) 
    into emp_demo values (566, 'Patel', 6, date '2015-03-03', 16) 
select * from dual; 
0

Lassen Sie sagen, Sie eine Liste von Listen (die so genannte Mitarbeiter) mit Säulen laufen kann [employee_id, manager_id, Dauer]:

desired_dict = {} 
for employee_id, manager_id, duration in employees: 
    desired_dict[employee_id] = {"manager_id" : manager_id, "duration" : duration } 

#or even better 
desired_dict = {employee_id : {"manager_id" : manager_id, "duration" : duration } 
for employee_id, manager_id, duration in employees} 

#now, you can access an employee like: 
some_manager = desired_dict[334]['manager_id'] 
some_duration = desired_dict[334]['duration'] 

Aber Sie wollen wahrscheinlich so etwas wie pandas und wie etwas tun verwenden, :

import pandas as pd 
employees_data = pd.DataFrame(employees, columns=['employee_id', 'manager_id', 'duration']) 
employees_data.index = employees_data['employee_id'] 
desired_dict = employees_data.to_dict() 
+0

Ich denke, es gibt ein Missverständnis. möchte Python-Dict-Struktur in Orakel plsql implementieren – user125687

Verwandte Themen