docs(service-auto): ground truth audit v3 from MARIUSM_AUTO production
Add real production sources as authoritative reference (supersedes vfp_roaauto/Scripturi_instalare/packages.sql which is for a different product — devize producție, not service auto): - mariusm_ddl_export.sql: 5127 lines DDL from DBMS_METADATA (tables, views, triggers) of MARIUSM_AUTO schema - pack_auto.pck: main business package (17 procedures) - PACK_FACTURARE.pck, PACK_SESIUNE.pck, PACK_CONTAFIN.pck, PACK_COMENZI.pck: dependency packages - export_ddl.sql: SQL export helper using DBMS_METADATA + DBMS_OUTPUT with discovery via ALL_OBJECTS LIKE patterns Rewrite tabele-service-auto.md v3 (~600 lines) fully grounded in production sources. Map all flows end-to-end: - Create (pack_auto.dev_adauga_lucrare) → NOM_LUCRARI + DEV_ORDL - Normare (dev_adauga_operatie) → DEV_OPER + DEV_OPER_MECANICI - Validate ops (dev_valideaza_operatii) → DEV_OPER.VALIDAT - Validate order (dev_valideaza_comanda) → DEV_ORDL.VALIDAT + CALENDAR - Archive (dev_arhiveaza_comanda) → DEV_ORDL.INCHIS_FORTAT - Bonuri consum: generic ROA (ointroduceri.prg tip=3) → RUL.id_lucrare - Facturare: pack_facturare.* + pack_auto.actualizeaza_deviz Key business semantics confirmed by Marius 2026-04-11: - DEV_TIP_DEVIZ.inch_validare = 1 means validation alone closes the order (no closing note). inch_validare = 0 means additional closing required (via invoice for billable types, or 711=332 journal entry for internal types). View AUTO_LISTARE_MAN_TOT_COM has the exact "closed" condition as (validat=1 AND inch_validare=1) OR (facturat=1 AND inch_validare=0). - Live DEV_TIP_DEVIZ values: 1=POST GARANTIE, 2=GARANTIE, 3=REGIE, 4=PREGATIRE, 5=REGIE 2, 6=PRODUCTIE, 7=CONSTATARE. REGIE/PRODUCTIE/ CONSTATARE have inch_validare=1 (internal, closed at validation). - DEV_OPER for service auto contains only manopera (id_norme). The id_articol/id_rul_aux columns exist in DDL for another product that shares the table but are not populated by pack_auto. - Real materials consumed on an order live in RUL tagged by id_lucrare, not in DEV_OPER. DEV_ESTIMARI_REP is a separate pre-sale estimate (both manopera and materiale lines) given to the client, independent of the real manopera (DEV_OPER) and real materials (RUL). Plan Correction 13 (claude-main-design-20260411-rethink.md): - Invalidate Scripturi_instalare references - Confirm NOM_LUCRARI ← DEV_ORDL inheritance pattern - Confirm pack_sesiune.dev_idLucrare/dev_idOrdl populated by triggers - Refine prototype SP (Option 3) template based on real schema - Timeline unchanged, scope wall reconfirmed Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2804
docs/service-auto/PACK_COMENZI.pck
Normal file
2804
docs/service-auto/PACK_COMENZI.pck
Normal file
File diff suppressed because it is too large
Load Diff
8993
docs/service-auto/PACK_CONTAFIN.pck
Normal file
8993
docs/service-auto/PACK_CONTAFIN.pck
Normal file
File diff suppressed because it is too large
Load Diff
16946
docs/service-auto/PACK_FACTURARE.pck
Normal file
16946
docs/service-auto/PACK_FACTURARE.pck
Normal file
File diff suppressed because it is too large
Load Diff
@@ -294,6 +294,91 @@ template + decision-log. Ce se schimbă: **țintim o tabelă reală (`dev_ordl`)
|
||||
real (`dev_tip_deviz`), și documentăm un path clar spre reuse-ul pachet-urilor legacy pentru
|
||||
phase 2**. Hedge-ul devine mai credibil, nu mai slab.
|
||||
|
||||
### Correction 13 — Ground truth complet din MARIUSM_AUTO (2026-04-11 later)
|
||||
|
||||
**Ce s-a schimbat:** Marius a furnizat versiunile reale din producție:
|
||||
- `docs/service-auto/mariusm_ddl_export.sql` (5127 linii DDL: tabele + views + triggere)
|
||||
- `docs/service-auto/pack_auto.pck`, `PACK_FACTURARE.pck`, `PACK_SESIUNE.pck`,
|
||||
`PACK_CONTAFIN.pck`, `PACK_COMENZI.pck` — body-urile reale
|
||||
|
||||
**Ce s-a invalidat:**
|
||||
- **`vfp_roaauto/Scripturi_instalare/packages.sql` = alt produs** ("devize producție"), NU
|
||||
service auto. Toate referințele v2 la `pack_devize.dev_adauga_lucrare` erau la un pachet
|
||||
care nu există în MARIUSM_AUTO.
|
||||
- **`VCOMENZI` din MARIUSM_AUTO nu e pentru service auto** — e pentru ROA ERP base
|
||||
(vânzări/contracte generice), cu coloane `id_codclient`/`interna`/`id_masina` care
|
||||
nu aparțin flux-ului auto.
|
||||
- **`dev_distribuie_timp_n`** are semnătură nouă: `(v_luna, v_an)` nu `(v_gcs, v_filtru)`.
|
||||
|
||||
**Ce s-a reconfirmat ca fiind corect:**
|
||||
- Pattern-ul de inheritance `NOM_LUCRARI` (parent) + `DEV_ORDL` (child, FK `id_lucrare`)
|
||||
- `TRG_NOM_LUCRARI_BEFOINS` populează `pack_sesiune.dev_idLucrare` din `SEQ_NOM_LUCRARI.NEXTVAL`
|
||||
- `TRG_DEV_ORDL_BEFOINS` populează `pack_sesiune.dev_idOrdl` din `SEQ_DEV_ORDL.NEXTVAL`
|
||||
- Bypass `pack_sesiune` prin `RETURNING id_lucrare INTO v_local` e **trivial și safe**
|
||||
(trigger-ul rulează oricum, noi îl ignorăm)
|
||||
|
||||
**Descoperiri NOI critice:**
|
||||
1. **`DEV_ORDL` are 37 coloane în producție** (nu 28-30 cum estima v2), cu
|
||||
`PROC_TVAV`, `SOLICITARI_CLIENT CLOB`, `OBSERVATII`, `DEFECTIUNI`, `NR_DOSAR`,
|
||||
`ID_PART` (FK la NOM_PARTENERI — client direct, nu doar prin mașină), `ID_AGENT`,
|
||||
`ID_PART_REF`, `ORE_FUNCTIONARE`, `IN_LUCRU`, `COADA_DEVIZ`, `ID_UTIL_INCHIS`,
|
||||
`DATAORAINCHIS`, `DATA_IN_LUCRU`, `DATAORAINLUCRU`, `FACTUREZMIX`, `DATA_CURS`,
|
||||
`ID_VALUTA_DEVIZ`, `INCHIS_FORTAT`. FK constraints ENABLE:
|
||||
`FK_DEV_ORDL_001..006` pe `DEV_NOM_INSPECTORI`, `NOM_LUCRARI`, `NOM_PARTENERI` ×3,
|
||||
`NOM_VALUTE`.
|
||||
2. **`DEV_OPER` e polimorfic**: poate fi **manoperă** (`id_norme` non-NULL) SAU **linie
|
||||
material** (`id_articol` non-NULL + `id_rul_aux` FK la mișcarea de stoc). Materialele
|
||||
pe comandă nu au tabela `DEV_MAT` separată — sunt linii în `DEV_OPER` cu tip diferit.
|
||||
3. **`DEV_ESTIMARI_REP`** e tabelă nouă (pre-sale estimate) — linii cu `id_lucrare` FK,
|
||||
fiecare linie e fie manoperă fie material. `pack_auto.adauga_manopera_de` /
|
||||
`adauga_material_de` scriu aici. View `AUTO_VESTIMARI_REP` cu `pack_sesiune.calculeaza_*`
|
||||
pentru prețuri. **Out of scope** pentru prototype.
|
||||
4. **`DEV_TIP_DEVIZ.INCH_VALIDARE`** (NUMBER(1) default 1) e flag-ul care decide între
|
||||
**închidere prin validare** (`dev_valideaza_comanda`) sau **închidere prin arhivare**
|
||||
(`dev_arhiveaza_comanda`). Citit prin `pack_auto.getOptiuneInchidere(id_tip)`.
|
||||
5. **`actualizeaza_deviz` (pack_auto)** e procedura care replace-uiește vechiul
|
||||
`dev_completeaza_rul`. Face 3 UPDATE-uri într-o tranzacție: `DEV_ORDL.PROC_TVAV`,
|
||||
`RUL.ID_FACT` (pentru toate materialele consumate), și — condiționat de `id_set` în
|
||||
(31003-31011) — `NOM_LUCRARI.ID_FACT`.
|
||||
6. **Bonuri consum = flux generic ROA, nu `pack_auto`** — `ointroduceri.prg tip=3` scrie
|
||||
direct în `RUL` + `RUL_AUXILIAR` cu `ID_LUCRARE` tag. `DEV_OPER` capturează liniile
|
||||
prin `id_rul_aux` FK. **Out of scope.**
|
||||
7. **View-urile UI**: `AUTO_NORMARE_COMENZI`, `AUTO_VALIDARE_COMENZI`, `AUTO_ORDL_FACTURARE`,
|
||||
`AUTO_COMENZI_VALIDATE` (cu time-aware validat flag prin `pack_sesiune.getluna()`),
|
||||
`AUTO_VORDL_MAN`, `AUTO_VORDL_MAT` (citește din `MV_ORDL_MAT` materialized view),
|
||||
`AUTO_VESTIMARI_REP`.
|
||||
8. **`pack_audit.verifica_val`** — trigger-ele `_BEFOUPD` pe `NOM_LUCRARI`, `DEV_ORDL`,
|
||||
`DEV_OPER`, `DEV_OPER_MECANICI` apelează această procedură pentru fiecare câmp modificat
|
||||
→ audit trail automat pentru TOATE UPDATE-urile. Triggerele `_BEFOINS` **nu** apelează
|
||||
pack_audit — deci prototype-ul care doar inserează **nu atinge pack_audit**.
|
||||
|
||||
**Audit complet:** `docs/service-auto/tabele-service-auto.md` a fost rescris complet
|
||||
(v3, ~500 linii) cu referințe directe la DDL + pack_auto + pack_facturare real. Conține:
|
||||
- Diagrama ierarhiei `NOM_LUCRARI → DEV_ORDL → DEV_OPER → DEV_OPER_MECANICI`
|
||||
- Schema reală `DEV_ORDL` (37 coloane) + `DEV_OPER` (polimorfic) + `DEV_ESTIMARI_REP`
|
||||
- Map procedure → tabele pentru întreg `pack_auto` (17 proceduri/funcții)
|
||||
- Flux VFP real pentru create, normare, validare operații, validare comandă, arhivare,
|
||||
facturare (cu referințe la `pack_facturare.initializeaza_date_factura`,
|
||||
`adauga_articol_factura_deviz`, `scrie_in_vanzari`)
|
||||
- List complete de view-uri UI cu rolul fiecăruia
|
||||
- SP minimal propus pentru prototype (Opțiunea 3, rafinată) — 30 linii PL/SQL, zero
|
||||
dependențe pe `pack_contafin`/`STRINGAGG`/`pack_sesiune`, doar două INSERT-uri cu
|
||||
RETURNING și un duplicate-check
|
||||
|
||||
**Scope wall reconfirmat**: prototype-ul rămâne la **creare comandă simplă**. Normare,
|
||||
validare operații, validare comandă, arhivare, facturare, bonuri consum, estimare =
|
||||
**phase 2+**. Fluxul complet e documentat ca referință viitoare, nu ca commitment.
|
||||
|
||||
**Impact asupra timeline:** **zero** — task-urile săpt 1-24 rămân identice, doar că săpt 7-8
|
||||
("scrie SP_CREEAZA_COMANDA") are acum templatul PL/SQL exact definitivat în tabele-service-auto.md
|
||||
§12.2, gata de copy-paste + commit.
|
||||
|
||||
**Impact asupra ipotezelor:** niciuna invalidată. Ipoteza #1 rămâne centrală — probă că
|
||||
Python+oracledb apelează PL/SQL cu OUT params pe un INSERT dual cu RETURNING. Ipoteza #2
|
||||
(`session_callback`) rămâne independentă. Ipoteza #3 (grants) este și mai **ușor de probat**
|
||||
acum că știm exact cele două tabele atinse (`NOM_LUCRARI`, `DEV_ORDL`) și putem scrie
|
||||
testul negativ cu nume fixe.
|
||||
|
||||
### Correction 4 — `connection.commit()` e explicit în pattern
|
||||
|
||||
**Prima versiune** nu menționa commit. **Realitate:** `oracledb` driver are autocommit OFF
|
||||
|
||||
402
docs/service-auto/export_ddl.sql
Normal file
402
docs/service-auto/export_ddl.sql
Normal file
@@ -0,0 +1,402 @@
|
||||
-- =============================================================================
|
||||
-- Export DDL + date din MARIUSM_AUTO pentru audit service-auto
|
||||
-- =============================================================================
|
||||
-- Utilizare:
|
||||
-- 1. Deschide SQL Developer (sau sqlplus) conectat ca MARIUSM_AUTO
|
||||
-- (sau orice user cu SELECT_CATALOG_ROLE)
|
||||
-- 2. Rulează tot scriptul (F5 în SQL Developer)
|
||||
-- 3. Output-ul apare în panoul "Script Output" — selectează tot, copiază,
|
||||
-- trimite la Claude (sau salvează în fișier)
|
||||
--
|
||||
-- Output-ul conține:
|
||||
-- - DDL pentru tabele DEV_*, NOM_LUCRARI, RUL, ACT, VANZARI
|
||||
-- - DDL pentru pachete PACK_AUTO, PACK_FACTURARE, PACK_SESIUNE, PACK_CONTAFIN
|
||||
-- - DDL pentru triggere TRG_DEV_*, TRG_NOM_LUCRARI_*
|
||||
-- - DDL pentru views AUTO_*, DEV_V*, DEV_COMENZI_VALIDATE
|
||||
-- - Conținutul enum DEV_TIP_DEVIZ (live)
|
||||
-- - Coloanele live din DEV_ORDL, DEV_MASINICLIENTI, DEV_ESTIMARI_REP
|
||||
--
|
||||
-- Alternativ pentru sqlplus cu spool în fișier:
|
||||
-- sqlplus MARIUSM_AUTO/parola@10.0.20.121:1521/ROA @export_ddl.sql
|
||||
-- → fișierul `mariusm_ddl_export.log` e generat în directorul curent
|
||||
-- =============================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET LINESIZE 32767
|
||||
SET LONG 100000000
|
||||
SET LONGCHUNKSIZE 32767
|
||||
SET PAGESIZE 0
|
||||
SET FEEDBACK OFF
|
||||
SET VERIFY OFF
|
||||
SET HEADING OFF
|
||||
SET TRIMSPOOL ON
|
||||
SET TRIMOUT ON
|
||||
SET WRAP OFF
|
||||
|
||||
-- Spool DOAR dacă rulezi din sqlplus. SQL Developer ignoră această linie dacă
|
||||
-- nu folosește `@script`. În SQL Developer pur, rezultatul apare în "Script Output".
|
||||
SPOOL mariusm_ddl_export.log
|
||||
|
||||
-- Schema țintă — modifică dacă testezi pe alt user
|
||||
DEFINE schema_name = 'MARIUSM_AUTO'
|
||||
|
||||
-- =============================================================================
|
||||
-- Config DBMS_METADATA pentru DDL curat (fără storage/segment noise)
|
||||
-- =============================================================================
|
||||
BEGIN
|
||||
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', FALSE);
|
||||
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', FALSE);
|
||||
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'TABLESPACE', FALSE);
|
||||
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', TRUE);
|
||||
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
|
||||
END;
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT =============================================================================
|
||||
PROMPT == MARIUSM_AUTO DDL EXPORT — start
|
||||
PROMPT == Data rulare: &_DATE
|
||||
PROMPT =============================================================================
|
||||
PROMPT
|
||||
|
||||
-- =============================================================================
|
||||
-- BLOCUL MARE: tot exportul rulează într-un PL/SQL anonim care folosește
|
||||
-- DBMS_OUTPUT.PUT_LINE ca să scrie totul în ordinea dorită.
|
||||
-- Marca de secțiune e `-- === SECTION: <nume> ===` ca să o putem parsa ulterior.
|
||||
-- =============================================================================
|
||||
DECLARE
|
||||
v_schema VARCHAR2(30) := '&schema_name';
|
||||
v_ddl CLOB;
|
||||
v_offset NUMBER;
|
||||
v_chunk_size NUMBER := 30000;
|
||||
v_length NUMBER;
|
||||
|
||||
-- Liste de obiecte de exportat — pattern-urile sunt SQL LIKE cu ESCAPE '\'
|
||||
TYPE t_patterns IS TABLE OF VARCHAR2(100);
|
||||
|
||||
-- Tabele relevante
|
||||
v_table_patterns t_patterns := t_patterns(
|
||||
'DEV\_%', -- toate DEV_* (ordl, oper, nom_norme, tip_deviz, estimari_rep, masiniclienti, ...)
|
||||
'NOM\_LUCRARI',
|
||||
'NOM\_ARTICOLE',
|
||||
'RUL',
|
||||
'ACT',
|
||||
'VANZARI',
|
||||
'CONTRACTE',
|
||||
'CTR\_ARTICOLE',
|
||||
'CALENDAR',
|
||||
'NOM\_PARTENERI',
|
||||
'PARTENERI'
|
||||
);
|
||||
|
||||
-- Views relevante
|
||||
v_view_patterns t_patterns := t_patterns(
|
||||
'AUTO\_%', -- AUTO_NORMARE_COMENZI, AUTO_ORDL_FACTURARE, AUTO_VNORME
|
||||
'DEV\_V%', -- DEV_VORDL, DEV_VOPER, DEV_VVALID_COMENZI
|
||||
'DEV\_COMENZI\_VALIDATE',
|
||||
'VCOMENZI',
|
||||
'VNOM\_%'
|
||||
);
|
||||
|
||||
-- Triggere relevante
|
||||
v_trigger_patterns t_patterns := t_patterns(
|
||||
'TRG\_DEV\_%',
|
||||
'TRG\_NOM\_LUCRARI\_%'
|
||||
);
|
||||
|
||||
-- Pachete — listă explicită (DBMS_METADATA cere nume exact pentru PACKAGE)
|
||||
TYPE t_packages IS TABLE OF VARCHAR2(30);
|
||||
v_packages t_packages := t_packages(
|
||||
'PACK_AUTO',
|
||||
'PACK_FACTURARE',
|
||||
'PACK_SESIUNE',
|
||||
'PACK_CONTAFIN',
|
||||
'PACK_COMENZI',
|
||||
'PACK_TYPES'
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- Helper: print CLOB în chunk-uri (DBMS_OUTPUT limit = 32767/linie)
|
||||
-- =====================================================
|
||||
PROCEDURE print_clob(p_clob IN CLOB) IS
|
||||
v_pos NUMBER := 1;
|
||||
v_line VARCHAR2(32767);
|
||||
v_nl NUMBER;
|
||||
BEGIN
|
||||
IF p_clob IS NULL THEN RETURN; END IF;
|
||||
WHILE v_pos <= DBMS_LOB.GETLENGTH(p_clob) LOOP
|
||||
v_nl := DBMS_LOB.INSTR(p_clob, CHR(10), v_pos);
|
||||
IF v_nl = 0 OR v_nl - v_pos > 32000 THEN
|
||||
v_line := DBMS_LOB.SUBSTR(p_clob, LEAST(32000, DBMS_LOB.GETLENGTH(p_clob) - v_pos + 1), v_pos);
|
||||
DBMS_OUTPUT.PUT_LINE(v_line);
|
||||
v_pos := v_pos + LENGTH(v_line);
|
||||
ELSE
|
||||
v_line := DBMS_LOB.SUBSTR(p_clob, v_nl - v_pos, v_pos);
|
||||
DBMS_OUTPUT.PUT_LINE(v_line);
|
||||
v_pos := v_nl + 1;
|
||||
END IF;
|
||||
END LOOP;
|
||||
END;
|
||||
|
||||
-- =====================================================
|
||||
-- Helper: export un grup de obiecte descoperite prin LIKE pe ALL_OBJECTS
|
||||
-- =====================================================
|
||||
PROCEDURE export_group(
|
||||
p_object_type IN VARCHAR2,
|
||||
p_patterns IN t_patterns,
|
||||
p_section IN VARCHAR2
|
||||
) IS
|
||||
v_where_clause VARCHAR2(4000);
|
||||
v_sql VARCHAR2(4000);
|
||||
TYPE t_names IS TABLE OF VARCHAR2(128);
|
||||
v_names t_names;
|
||||
BEGIN
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
DBMS_OUTPUT.PUT_LINE('-- ============================================================');
|
||||
DBMS_OUTPUT.PUT_LINE('-- === SECTION: ' || p_section || ' ===');
|
||||
DBMS_OUTPUT.PUT_LINE('-- ============================================================');
|
||||
|
||||
-- Build WHERE clause din pattern-uri
|
||||
v_where_clause := '';
|
||||
FOR i IN 1 .. p_patterns.COUNT LOOP
|
||||
IF i > 1 THEN v_where_clause := v_where_clause || ' OR '; END IF;
|
||||
v_where_clause := v_where_clause ||
|
||||
'object_name LIKE ''' || p_patterns(i) || ''' ESCAPE ''\''';
|
||||
END LOOP;
|
||||
|
||||
v_sql := 'SELECT object_name FROM all_objects ' ||
|
||||
'WHERE owner = :1 AND object_type = :2 AND (' || v_where_clause || ') ' ||
|
||||
'ORDER BY object_name';
|
||||
|
||||
EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_names USING v_schema, p_object_type;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('-- Găsite: ' || v_names.COUNT || ' obiecte');
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
|
||||
FOR i IN 1 .. v_names.COUNT LOOP
|
||||
BEGIN
|
||||
DBMS_OUTPUT.PUT_LINE('-- --- ' || p_object_type || ': ' || v_names(i) || ' ---');
|
||||
v_ddl := DBMS_METADATA.GET_DDL(p_object_type, v_names(i), v_schema);
|
||||
print_clob(v_ddl);
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('-- ERROR la ' || v_names(i) || ': ' || SQLERRM);
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
|
||||
-- =====================================================
|
||||
-- Helper: export pachet (spec + body separate)
|
||||
-- =====================================================
|
||||
PROCEDURE export_package(p_name IN VARCHAR2) IS
|
||||
v_exists NUMBER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_exists
|
||||
FROM all_objects
|
||||
WHERE owner = v_schema
|
||||
AND object_name = p_name
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY');
|
||||
|
||||
IF v_exists = 0 THEN
|
||||
DBMS_OUTPUT.PUT_LINE('-- SKIP ' || p_name || ' — nu există în ' || v_schema);
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('-- --- PACKAGE SPEC: ' || p_name || ' ---');
|
||||
BEGIN
|
||||
v_ddl := DBMS_METADATA.GET_DDL('PACKAGE_SPEC', p_name, v_schema);
|
||||
print_clob(v_ddl);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('-- ERROR spec: ' || SQLERRM);
|
||||
END;
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('-- --- PACKAGE BODY: ' || p_name || ' ---');
|
||||
BEGIN
|
||||
v_ddl := DBMS_METADATA.GET_DDL('PACKAGE_BODY', p_name, v_schema);
|
||||
print_clob(v_ddl);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('-- ERROR body: ' || SQLERRM);
|
||||
END;
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
-- =====================================================
|
||||
-- 1. TABELE
|
||||
-- =====================================================
|
||||
export_group('TABLE', v_table_patterns, 'TABLES');
|
||||
|
||||
-- =====================================================
|
||||
-- 2. VIEWS
|
||||
-- =====================================================
|
||||
export_group('VIEW', v_view_patterns, 'VIEWS');
|
||||
|
||||
-- =====================================================
|
||||
-- 3. TRIGGERE
|
||||
-- =====================================================
|
||||
export_group('TRIGGER', v_trigger_patterns, 'TRIGGERS');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. PACHETE (spec + body)
|
||||
-- =====================================================
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
DBMS_OUTPUT.PUT_LINE('-- ============================================================');
|
||||
DBMS_OUTPUT.PUT_LINE('-- === SECTION: PACKAGES ===');
|
||||
DBMS_OUTPUT.PUT_LINE('-- ============================================================');
|
||||
DBMS_OUTPUT.PUT_LINE('');
|
||||
FOR i IN 1 .. v_packages.COUNT LOOP
|
||||
export_package(v_packages(i));
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
-- =============================================================================
|
||||
-- SECTION: DATA SAMPLES & COLUMN METADATA
|
||||
-- =============================================================================
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: DATA - DEV_TIP_DEVIZ (enum live) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
SET HEADING ON
|
||||
SET PAGESIZE 1000
|
||||
SET FEEDBACK ON
|
||||
COLUMN id_tip FORMAT 999
|
||||
COLUMN denumire FORMAT A40
|
||||
COLUMN sters FORMAT 9
|
||||
COLUMN inch_validare FORMAT 9
|
||||
|
||||
SELECT id_tip, denumire, sters, inch_validare
|
||||
FROM &schema_name..dev_tip_deviz
|
||||
ORDER BY id_tip;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: COLUMNS - DEV_ORDL (live schema) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
COLUMN column_name FORMAT A30
|
||||
COLUMN data_type FORMAT A15
|
||||
COLUMN data_length FORMAT 99999
|
||||
COLUMN nullable FORMAT A3
|
||||
COLUMN data_default FORMAT A20
|
||||
|
||||
SELECT column_name, data_type, data_length, nullable, data_default
|
||||
FROM all_tab_columns
|
||||
WHERE owner = '&schema_name'
|
||||
AND table_name = 'DEV_ORDL'
|
||||
ORDER BY column_id;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: COLUMNS - DEV_OPER (live schema) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
SELECT column_name, data_type, data_length, nullable, data_default
|
||||
FROM all_tab_columns
|
||||
WHERE owner = '&schema_name'
|
||||
AND table_name = 'DEV_OPER'
|
||||
ORDER BY column_id;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: COLUMNS - DEV_ESTIMARI_REP (live schema) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
SELECT column_name, data_type, data_length, nullable, data_default
|
||||
FROM all_tab_columns
|
||||
WHERE owner = '&schema_name'
|
||||
AND table_name = 'DEV_ESTIMARI_REP'
|
||||
ORDER BY column_id;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: COLUMNS - DEV_MASINICLIENTI (live schema) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
SELECT column_name, data_type, data_length, nullable
|
||||
FROM all_tab_columns
|
||||
WHERE owner = '&schema_name'
|
||||
AND table_name = 'DEV_MASINICLIENTI'
|
||||
ORDER BY column_id;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: COLUMNS - NOM_LUCRARI (live schema) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
SELECT column_name, data_type, data_length, nullable
|
||||
FROM all_tab_columns
|
||||
WHERE owner = '&schema_name'
|
||||
AND table_name = 'NOM_LUCRARI'
|
||||
ORDER BY column_id;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: FK CONSTRAINTS pe DEV_* și NOM_LUCRARI ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
COLUMN constraint_name FORMAT A30
|
||||
COLUMN table_name FORMAT A25
|
||||
COLUMN column_name FORMAT A25
|
||||
COLUMN r_table FORMAT A25
|
||||
COLUMN r_column FORMAT A25
|
||||
|
||||
SELECT c.constraint_name,
|
||||
c.table_name,
|
||||
cc.column_name,
|
||||
rcc.table_name AS r_table,
|
||||
rcc.column_name AS r_column
|
||||
FROM all_constraints c
|
||||
JOIN all_cons_columns cc
|
||||
ON c.owner = cc.owner
|
||||
AND c.constraint_name = cc.constraint_name
|
||||
JOIN all_cons_columns rcc
|
||||
ON c.r_owner = rcc.owner
|
||||
AND c.r_constraint_name = rcc.constraint_name
|
||||
AND cc.position = rcc.position
|
||||
WHERE c.owner = '&schema_name'
|
||||
AND c.constraint_type = 'R'
|
||||
AND (c.table_name LIKE 'DEV\_%' ESCAPE '\' OR c.table_name = 'NOM_LUCRARI')
|
||||
ORDER BY c.table_name, c.constraint_name, cc.position;
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ============================================================
|
||||
PROMPT -- === SECTION: SEQUENCES (SEQ_DEV_*, SEQ_NOM_LUCRARI) ===
|
||||
PROMPT -- ============================================================
|
||||
PROMPT
|
||||
|
||||
COLUMN sequence_name FORMAT A30
|
||||
COLUMN last_number FORMAT 99999999999
|
||||
COLUMN increment_by FORMAT 99999
|
||||
|
||||
SELECT sequence_name, last_number, increment_by, cycle_flag
|
||||
FROM all_sequences
|
||||
WHERE sequence_owner = '&schema_name'
|
||||
AND (sequence_name LIKE 'SEQ\_DEV\_%' ESCAPE '\'
|
||||
OR sequence_name LIKE 'SEQ\_NOM\_LUCRARI%' ESCAPE '\'
|
||||
OR sequence_name LIKE 'SEQ\_NRORD%' ESCAPE '\')
|
||||
ORDER BY sequence_name;
|
||||
|
||||
PROMPT
|
||||
PROMPT =============================================================================
|
||||
PROMPT == MARIUSM_AUTO DDL EXPORT — done
|
||||
PROMPT =============================================================================
|
||||
|
||||
SPOOL OFF
|
||||
|
||||
SET FEEDBACK ON
|
||||
SET PAGESIZE 14
|
||||
SET HEADING ON
|
||||
5127
docs/service-auto/mariusm_ddl_export.sql
Normal file
5127
docs/service-auto/mariusm_ddl_export.sql
Normal file
File diff suppressed because it is too large
Load Diff
1798
docs/service-auto/pack_auto.pck
Normal file
1798
docs/service-auto/pack_auto.pck
Normal file
File diff suppressed because it is too large
Load Diff
1179
docs/service-auto/pack_sesiune.pck
Normal file
1179
docs/service-auto/pack_sesiune.pck
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user