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:
Claude Agent
2026-04-11 16:03:20 +00:00
parent 6aceb85bf1
commit 43484db45e
9 changed files with 38142 additions and 458 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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

View 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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff