* test_s8_unicitate_cursuri.prg * Verifica daca exista constrangere/index UNIQUE pe (ID_VANZARE, ID_VALUTA) pe VANZARI_CURSURI, * cerut de orchestrator pentru a inchide definitiv discutia despre cardinalitatea join-ului * folosit de VVANZARI_ARTICOLE (S8 pas 1). Nu scrie in Oracle - doar SELECT. SET SAFETY OFF SET TALK OFF PUBLIC gcErrLog gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_unicitate_cursuri_log.txt' STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog) ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8 IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDIF LOCAL lcOut, lcSql lcOut = '' *!* --- 1. constrangeri P/U pe VANZARI_CURSURI, cu coloanele in ordine --- TEXT TO lcSql NOSHOW select ac.constraint_name, ac.constraint_type, acc.column_name, acc.position from all_constraints ac join all_cons_columns acc on ac.owner = acc.owner and ac.constraint_name = acc.constraint_name where ac.owner = 'MARIUSM_AUTO' and ac.table_name = 'VANZARI_CURSURI' and ac.constraint_type in ('P','U') order by ac.constraint_name, acc.position ENDTEXT IF Used('crscons') Use In crscons ENDIF IF goExecutor.oExecute(m.lcSql, [crscons]) < 0 lcOut = lcOut + 'EROARE constrangeri: ' + goExecutor.cEroare + CHR(13) + CHR(10) ELSE lcOut = lcOut + '--- CONSTRANGERI P/U pe VANZARI_CURSURI ---' + CHR(13) + CHR(10) IF RECCOUNT('crscons') = 0 lcOut = lcOut + '(niciuna)' + CHR(13) + CHR(10) ELSE SELECT crscons SCAN lcOut = lcOut + TRANSFORM(constraint_name) + ' | ' + TRANSFORM(constraint_type) + ' | ' + TRANSFORM(column_name) + ' | pos=' + TRANSFORM(position) + CHR(13) + CHR(10) ENDSCAN ENDIF USE IN crscons ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' *!* --- 2. indecsi (toti, cu uniqueness), coloanele in ordine --- TEXT TO lcSql NOSHOW select ai.index_name, ai.uniqueness, aic.column_name, aic.column_position from all_indexes ai join all_ind_columns aic on ai.owner = aic.index_owner and ai.index_name = aic.index_name where ai.owner = 'MARIUSM_AUTO' and ai.table_name = 'VANZARI_CURSURI' order by ai.index_name, aic.column_position ENDTEXT IF Used('crsidx') Use In crsidx ENDIF IF goExecutor.oExecute(m.lcSql, [crsidx]) < 0 lcOut = lcOut + 'EROARE indecsi: ' + goExecutor.cEroare + CHR(13) + CHR(10) ELSE lcOut = lcOut + CHR(13) + CHR(10) + '--- INDECSI pe VANZARI_CURSURI ---' + CHR(13) + CHR(10) IF RECCOUNT('crsidx') = 0 lcOut = lcOut + '(niciunul)' + CHR(13) + CHR(10) ELSE SELECT crsidx SCAN lcOut = lcOut + TRANSFORM(index_name) + ' | ' + TRANSFORM(uniqueness) + ' | ' + TRANSFORM(column_name) + ' | pos=' + TRANSFORM(column_position) + CHR(13) + CHR(10) ENDSCAN ENDIF USE IN crsidx ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1) QUIT PROCEDURE test_error_handler LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1) ENDPROC