Aktywne Wpisy
xxxzzz +380
A wy co biedaki, pewnie dla dziadków/rodziców płyta 1x2 i tyle? Nawet mi was nie żal. Tak szanują swoich bliskich ludzie na poziomie:
#wszystkichswietych #1listopada #bekazpodludzi
#wszystkichswietych #1listopada #bekazpodludzi
naksu +48
chciałabym aby seks nie istniał aby dzieci robiono w probówkach eliminując wady genetyczne i wybierając najlepsze geny spośród wyselekcjonowanych ludzi, którzy mają jak najlepsze wyniki zdrowia psychicznego i predyspozycji, reszta by się nie rozmnażała bo nie miałaby jak, siurek służyłby tylko do sikania, pusia tak samo, kobiety byłyby płaskie jak deski, nie miałyby okresu, facetom by nie stawał, nie mieli by spermy, nie byłoby spermiarzy jesu ale piękna wizja świata, zero gwałtów,
WITH gg AS(
SELECT
powerplanttypeid, description, id, ROWNUMBER()
OVER (
PARTITION BY powerplanttypeid ORDER BY id) AS pptid
FROM powerplant
)
SELECT id, description,TOCHAR(pptid) ||TOCHAR(powerplanttypeid) AS NRP FROM gg ORDER BY ID;
który zwraca śliczną tabelkę z ponumerowanymi recordami według kolejności i typu elektrowni (lewa tabelka na rysunku)
tzn.
jeśli jest elektrownia typu '1' i jest pierwsza z tej kategorii, to dostaje przypisanie '11',
jeśli jest elektrownia typu '1' i jest druga z tej kategorii, to dostaje przypisanie '21',
jeśli jest elektrownia typu '2' i jest pierwsza z tej kategorii, to dostaje przypisanie '12'
i tak dalej ...
Prawa tabelka to efekt fizycznego wklepania tam pozycji za pomocą INSERT INTO.
Cały kod PL/SQL wypełniający kolejnymi "elektrowniami" tabelę:
-- GENERATOR for powerplant table --------------------------------------------------
create or replace procedure powerplantpop(valnbr integer )
is
valnbr number := valnbr;
decl VARCHAR2(600);
powerplantcode VARCHAR2(64);
powerplanttypeid CHAR(7);
description VARCHAR2(64);
location VARCHAR2(128);
active CHAR(1);
dateactivefrom TIMESTAMP;
dateactiveto TIMESTAMP;
maxppt INT;
begin
SELECT MAX(powerplanttype.typename) INTO maxppt FROM powerplanttype;
for i in 1..valnbr loop
powerplanttypeid:=TRUNC(round(dbmsrandom.value(1,maxppt)));
description:=dbmsrandom.string('U',20);
location:=dbmsrandom.string('U',20);
active:=TRUNC(round(dbmsrandom.value(0,1)));
dateactivefrom :=TOTIMESTAMP(sysdate - (dbms_random.value(0,i)*10)-600); /*+0.5*/
dateactiveto :=TOTIMESTAMP(sysdate - dbmsrandom.value(0,i)); /*+0.1*/
powerplantcode:=ROUND(TOCHAR(dbmsrandom.value(0,100))) || powerplanttypeid ;
decl:= 'insert into powerplant values (seqpowerplant.nextval,:1,:2,:3,:4,:5,:6,:7)';
execute immediate decl using powerplantcode,powerplanttypeid, description, location, active, dateactivefrom,
dateactiveto;
end loop;
commit;
end;
/
Niestety, ale ten kod generuje losowe kody (i doskonale o tym wiem). Tabela powerplant wygląda tak:
CREATE TABLE powerplant (
id INT NOT NULL PRIMARY KEY,
powerplantcode VARCHAR2(64) NOT NULL,
powerplanttypeid CHAR(7) NOT NULL,
description VARCHAR2(64),
location VARCHAR2(128),
active CHAR(1),
dateactivefrom TIMESTAMP,
dateactiveto TIMESTAMP,
CONSTRAINT powerplantpowerplanttypefk FOREIGN KEY (powerplanttypeid) REFERENCES
powerplanttype(typename),
CONSTRAINT boolpp CHECK (active IN ('0', '1'))
);
Pytanie: czy da radę w PL/SQLu zrobić tak, żeby kod automatycznie przypisywał kolejnym rekordom takie przypisania jak wypluwa ten pierwszy SELECT i widoczny jest efekt w postaci kolumny NRP? Albo przenieść posortowane wartości z kolumny NRP do kolumny powerplantcode Od razu zaznaczam, że kolejność wpadania elektrowni i ich typów jest losowa, ale taka nie musi być. Wszystko w tych tabelach może być losowe, ale koniecznie ma wpisywać do POWERPLANTCODE dane w wyżej podanym formacie.
Umie ktoś? :( Bo już m-ty dzień nad tym siedzę i albo to jest coś bardzo prostego albo po prostu jestem cienki jak wiadomo co węża z tego PL/SQLa (╯︵╰,)
EDIT: Typów elektrowni jest 7.
#oracle #sql #bazydanych #plsql #programowanie
Zamykam temat