Tomasz Drzazga

Tomasz Drzazga Informatyk, Infolex
Duszniki-Zdrój

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Witam. Zastanawiam się czy jest możliwość zrobić SELECT wszystkich kolumn z tabeli, ale bez 3 pierwszych kolumn.
Mam tabelę w której jest ok 60 kolumn i chcę zrobić następujący INSERT:

INSERT INTO TABELA1
SELECT 'moja_wartosc1', 'moja_wartosc2', 'moja_wartosc3', i tu pozostale kolumny z tabeli TABELA1(bez pierwszych trzech kolumn)
FROM TABELA1
WHERE id = 10

To jest insert do tej samej tabeli. Chodzi o to, że id, magazyn i typ_dokumentu się zmieniają, a wszystkie pozostałe pola zostają bez zmian.
Wiem, że jest skladnia
SELECT TABELA1.*, ale mi chodzi o wszystkie oprócz.
Myślę, że ciekawy problem, bo nigdzie nie mogłem znaleźć rozwiązania. Chyba , że jest inny sposób na takiego inserta?
Łukasz Kurowski

Łukasz Kurowski Usque Ad Finem

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Jak PL/SQL, to możesz sobie dynamicznie składać "insert" na podstawie dba_all_columns. Sama składnia nie pozwala na takie zabawy, a przynajmniej ja się nie spotkałem.
Tomasz Poradowski

Tomasz Poradowski Specjalista od
wytwarzania
oprogramowania

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Tomasz Drzazga:
Witam. Zastanawiam się czy jest możliwość zrobić SELECT wszystkich kolumn z tabeli, ale bez 3 pierwszych kolumn.
Mam tabelę w której jest ok 60 kolumn i chcę zrobić następujący INSERT:
Zrób sobie widok na tych 60-ciu kolumnach i wtedy będziesz mógł zapewne dodać "..., v.*" na końcu tego Twojego INSERT-SELECT.
Tomasz Drzazga

Tomasz Drzazga Informatyk, Infolex
Duszniki-Zdrój

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Wymyśliłem trochę inny sposób. Skopiowałem wszystkie nazwy kolumn ze struktury tabeli i wkleiłem i jest prościej.

Zrobiłem insert i działa

INSERT INTO TABELA1
select ap_dobi_sq.NEXTVAL, a,b,c,d from TABELA2 where id=4));Tomasz Drzazga edytował(a) ten post dnia 26.05.11 o godzinie 11:34

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Tomasz Drzazga:
Wymyśliłem trochę inny sposób. Skopiowałem wszystkie nazwy kolumn ze struktury tabeli i wkleiłem i jest prościej.

Zrobiłem insert i działa

INSERT INTO TABELA1
select ap_dobi_sq.NEXTVAL, a,b,c,d from TABELA2 where id=4));
http://www.youtube.com/watch?v=6jMiXcJ-rvE
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Można też załadować dane do kolekcji, zaktualizować wartości wybranych kolumn i wstawić kolekcję do tabeli.

Czy warto iść w PL/SQLa w takim przypadku? Jak zwykle, to zależy... ;)


CREATE TABLE pkw_objects
AS
SELECT *
FROM all_objects
WHERE ROWNUM <= 0;



DECLARE
/* Nowy typ pomocniczy: tablica trzymajaca wiersze z ALL_OBJECTS */
TYPE t_all_obj_array IS TABLE OF all_objects%ROWTYPE
INDEX BY BINARY_INTEGER;

/* kolekcja */
l_objects t_all_obj_array;

/* kursor wybierajacy dane z tabeli zrodlowej */
CURSOR l_curr_obj
IS
SELECT *
FROM all_objects
WHERE ROWNUM <= 10;
BEGIN
OPEN l_curr_obj;

LOOP
FETCH l_curr_obj
BULK COLLECT INTO l_objects;

EXIT WHEN l_objects.COUNT = 0;

/* w kolekcji podmieniamy wartosci w wybranych kolumnach */
FOR idx IN 1 .. l_objects.COUNT
LOOP
l_objects(idx).owner := 'XYZ';
l_objects(idx).object_name := l_objects(idx).object_name || '_' || idx;
END LOOP;

/* wstawiamy dane do tabeli docelowej */
FORALL idx IN 1 .. l_objects.COUNT
INSERT INTO pkw_objects
VALUES l_objects(idx);
END LOOP;

CLOSE l_curr_obj;
END;
Tomasz Drzazga

Tomasz Drzazga Informatyk, Infolex
Duszniki-Zdrój

Temat: [PL/SQL] SELECT prawie wszystkich kolumn

Dzięki wielkie za odpowiedzi. Nauczyłem się sporo nowych rzeczy dzięki wam. Zawsze staram się jak najprościej zrobić daną rzecz. W PL/SQL też spróbuję napisać i zobaczę czy to się sprawdzi.
Dzięki za pomoc.

Następna dyskusja:

Oracle / SQL - wiele kolumn...




Wyślij zaproszenie do