Aktywne Wpisy
![DJRuraWydechowa](https://wykop.pl/cdn/c0834752/9025ac0b2f5d3aad9112f9c2c31bcfa19a911b67c11d016ddb7177437d653b5d,q60.jpg)
DJRuraWydechowa +277
Kolejny z tych debili Need For Speed Kraków, albo Illegal Night, który nie używa mózgu.
Nocny wypadek na Zabłociu, ameba umysłowa niby żyje, bo strażacy wyciągnęli go i został przetransportowany do szpitala, ale w sumie samochód jest tak #!$%@?, że szczerze mam wątpiwości, czy przeżyje. W najlepszym wypadku będzie kaleką do końca życia, tyle że już nie umysłowym, a fizycznym.
#krakow
Nocny wypadek na Zabłociu, ameba umysłowa niby żyje, bo strażacy wyciągnęli go i został przetransportowany do szpitala, ale w sumie samochód jest tak #!$%@?, że szczerze mam wątpiwości, czy przeżyje. W najlepszym wypadku będzie kaleką do końca życia, tyle że już nie umysłowym, a fizycznym.
#krakow
![DJRuraWydechowa - Kolejny z tych debili Need For Speed Kraków, albo Illegal Night, kt...](https://wykop.pl/cdn/c3201142/0e82adb07e33af2f743adf886fdf6e510c5d130f3ccb993a36d09bc581b115e9,w150.jpg?author=DJRuraWydechowa&auth=f2bb7a5ffb649ff838ef97c22f7b5a4a)
źródło: debil
Pobierz![Sleepypl](https://wykop.pl/cdn/c3397992/Sleepypl_j0DAsxwJmA,q60.jpg)
Sleepypl +816
Mirki,
w ramach procedury odświeżania środowiska testowego, muszę zrobić import danych, o tyle, o ile przez SQL Developera to nie problem, o tyle chciałem zautomatyzować te czynności.
Znalazłem query, które stworzy mi insert-y, niestety NIEBANGLA ORA-00936 i ORA-06512 :( w 31 linijce podobno, tak szukałem, tak analizowałem skrypt, ale nie wiem co jest złe.:
set serveroutput on size 100000
set feedback off
declare
v_table_name varchar2(30) := 'EMP'; -- Your Tablename
v_column_list varchar2(2000);
v_insert_list varchar2(2000);
v_ref_cur_columns varchar2(4000);
v_ref_cur_query varchar2(2000);
v_ref_cur_output varchar2(2000);
v_column_name varchar2(2000);
cursor c1 is select column_name, data_type from user_tab_columns where table_name = v_table_name order by column_id;
refcur sys_refcursor;
begin
for i in c1 loop
v_column_list := v_column_list||','||i.column_name;
if i.data_type = 'NUMBER' then
v_column_name := i.column_name;
elsif i.data_type = 'DATE' then
v_column_name := chr(39)||'to_date('||chr(39)||'||chr(39)'||'||to_char('||i.column_name||','||chr(39)||'dd/mm/yyyy hh:mi:ss'||chr(39)||')||chr(39)||'||chr(39)||', '||chr(39)||'||chr(39)||'||chr(39)||'dd/mm/rrrr hh:mi:ss'||chr(39)||'||chr(39)||'||chr(39)||')'||chr(39);
elsif i.data_type = 'VARCHAR2' then
v_column_name := 'chr(39)||'||i.column_name||'||chr(39)';
end if;
v_ref_cur_columns := v_ref_cur_columns||'||'||chr(39)||','||chr(39)||'||'||v_column_name;
end loop;
v_column_list := ltrim(v_column_list,',');
v_ref_cur_columns := substr(v_ref_cur_columns,8);
v_insert_list := 'INSERT INTO '||v_table_name||' ('||v_column_list||') VALUES ';
v_ref_cur_query := 'SELECT '||v_ref_cur_columns||' FROM '||v_table_name;
open refcur for v_ref_cur_query;
loop
fetch refcur into v_ref_cur_output;
exit when refcur%notfound;
v_ref_cur_output := '('||v_ref_cur_output||');';
v_ref_cur_output := replace(v_ref_cur_output,',,',',null,');
v_ref_cur_output := replace(v_ref_cur_output,'(,','(null,');
v_ref_cur_output := replace(v_ref_cur_output,',,)',',null)');
v_ref_cur_output := replace(v_ref_cur_output,'null,)','null,null)');
v_ref_cur_output := v_insert_list||v_ref_cur_output;
dbms_output.put_line (v_ref_cur_output);
end loop;
end;
/
ORA-00936: Błąd wyrażenia
ORA-00936: Błąd w linii 29
To w której linii pokaże błąd się zmienia, czasem pokazuje 31
Ty masz
vrefcuroutput := vinsertlist||vrefcuroutput;
dbmsoutput.putline (vrefcuroutput);
zauważ, że to co opisujesz jest stringiem, który pójdzie na dbms_output
więc, to nei to, te inserty nie są egzekwowane. Mają zostać wyprintowane, do użycia po odświeżeniu bazy.
https://stackoverflow.com/questions/tagged/ORA-00936
PS: W mojej ocenie dobra metoda na odświeżenie testinga danymi z produkcji to:
1. Pełen sync pryz użyci DUPLICATE DATABASE
2. Sync tabel i/lub danych przy użyciu Data Pump (expdp/impdp)
3. Sync tabel i/lub danych przy użyciu imp/exp
Kolejność taka jak ja
a co do tego kodu powyzej to blad obstawiam jest tutaj:
vrefcurcolumns := substr(vrefcur_columns,8);
vinsertlist := 'INSERT INTO '||vtablename||' ('||vcolumnlist||') VALUES ';
vrefcurquery := 'SELECT '||vrefcurcolumns||' FROM '||vtablename;
wycinasz substringiem ze zmiennej ktora nie istnieje ?? czy mnie sie wydaje i pozniej do query trafia pusty string(brak kolumn) ??
restore jest robiony za pomocą DUPLICATE DATABASE
Natomiast pewne dane muszę zrzucać przed restorem, dodatkowi userzy aplikacji, ustawienia specyficzne dla środowiska etc. i po restorze je ponownie zaaplikować.
najprościej mógłbym zrobić
select "insert into table_name (nazwa_kolumny1, nazwa_kolumny2, nazwa_kolumny3) VALUES '"||nazwa_kolumny1||"', '"||nazwa_kolumny2||"', '"||nazwa_kolumny3||"';" from table_name;
i miałbym zrzucone dane z ustawieniami na których mi zależy. Natomiast nadal byłbym zależny od architektury zrzucanych tabel, czego zdecydowanie nie chcę.
Natomiast, nie