Ver Mensaje Individual
  #17
Antiguo 12 de junio de 2024, 21:35
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola:

Acá paso el código de lo que dije anteriormente. Necesito exportar a una BBDD los datos de artículos, en este caso. Para eso creo un archivo .CSV y con la instrucción BULK INSERT de Sql Server lo importo.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  
  3.  input-output section.
  4.  file-control.
  5.      select optional archivo-csv assign to "C:\ARTI.CSV"
  6.         organization is line sequential.
  7.      
  8.  DATA            DIVISION.
  9.  file section.
  10.  fd  archivo-csv label records standard.
  11.  01  reg-csv     pic x(280).
  12.  
  13.  WORKING-STORAGE SECTION.
  14.  
  15.  01  registro.
  16.      02 csv-articulo     pic z(6).
  17.      02                  pic x value ";".
  18.      02 csv-denominacion pic x(100).
  19.      02                  pic x value ";".
  20.      02 csv-rubro        pic x(35).
  21.      02                  pic x value ";".
  22.      02 csv-cant-uni     pic zzzz9,999.
  23.      02                  pic x value ";".
  24.      02 csv-faccionado   pic xx.
  25.      02                  pic x value ";".
  26.      02 csv-kgfle        pic zzzz9,999.
  27.      02                  pic x value ";".
  28.      02 csv-porcaja      pic zzzz9,999.
  29.      02                  pic x value ";".
  30.      02 csv-porpallet    pic zzzz9,999.
  31.      02                  pic x value ";".
  32.      02 csv-desprom      pic zzzz9,999.
  33.      02                  pic x value ";".
  34.      02 csv-hasprom      pic zzzz9,999.
  35.      02                  pic x value ";".
  36.      02 csv-asociado     pic z(6).
  37.      02                  pic x value ";".
  38.      02 csv-suspendido   pic xx.
  39.      02                  pic x value ";".
  40.      02 csv-preciolibre  pic xx.
  41.      02                  pic x value ";".
  42.      02 csv-costo        pic z(9)9,99.
  43.      02                  pic x value ";".
  44.      02 csv-cosfec       pic x(10).
  45.      02                  pic x value ";".
  46.      02 csv-publico      pic z(9)9,99.
  47.      02                  pic x value ";".
  48.      02 csv-mayor        pic z(9)9,99.
  49.      02                  pic x value ";".
  50.      02 csv-iva          pic z9,99.
  51.      
  52.  01  wfraccionado        pic xx.
  53.  01  wprelibre           pic xx.
  54.  01  wsus                pic xx.
  55.  01  wcosto              pic 9(12)v99.
  56.  01  xfecha              pic 9999/99/99.
  57.  01  redefines xfecha.
  58.      02 wfecha           pic x(10).
  59.  01  wpublico            pic 9(12)v99.
  60.  01  wmayor              pic 9(12)v99.
  61.        
  62.  01 RETORNO      PIC S9(9) COMP-5.
  63.  01 COMANDO      PIC x(4096).
  64.  
  65.  PROCEDURE       DIVISION.
  66.  
  67.  #include "copys\declara-com.cpy".
  68.  
  69.  comienzo.
  70.     *> paso el string de conexión - tengo un origen de datos configurado por ODBC
  71.      move "DSN=POWERBI;UID=sa;PWD=**********"  to "ConnectionString" of BD.
  72.    
  73.      *> conecto a la BBDD
  74.      invoke BD "Connect" returning RETORNO.
  75.    
  76.      *> Elimino la BBDD
  77.      move spaces                   to comando.
  78.      move 'DROP TABLE IF EXISTS dbo."Articulos"'    to comando.
  79.      INVOKE BD "Execute" USING comando RETURNING RETORNO.
  80.  
  81.      *> Creo la BBDD
  82.      move spaces                   to comando.
  83.      string 'CREATE TABLE  dbo."Articulos"'         delimited by size
  84.             ' ( '                                   delimited by size
  85.             'articulo     integer, '                delimited by size
  86.             'denominacion character varying(100), ' delimited by size
  87.             'rubro        character varying(35), '  delimited by size
  88.             'cant_uni     numeric(8,3), '           delimited by size
  89.             'faccionado   character varying(2), '   delimited by size
  90.             'kgfle        numeric(8,3), '           delimited by size
  91.             'porcaja      numeric(8,3), '           delimited by size
  92.             'porpallet    numeric(8,3), '           delimited by size
  93.             'desprom      numeric(8,3), '           delimited by size
  94.             'hasprom      numeric(8,3), '           delimited by size
  95.             'asociado     integer, '                delimited by size
  96.             'suspendido   character varying(2), '   delimited by size
  97.             'preciolibre  character varying(2), '   delimited by size
  98.             'costo        numeric(12,2), '          delimited by size
  99.             'cosfec       date, '                   delimited by size
  100.             'publico      numeric(12,2), '          delimited by size
  101.             'mayor        numeric(12,2), '          delimited by size
  102.             'iva          numeric(5,2) '            delimited by size
  103.             ')'                                     delimited by size
  104.         into comando
  105.      end-string.
  106.      INVOKE BD "Execute" USING comando RETURNING RETORNO.
  107.  
  108.      open input arti nivel output archivo-csv.
  109.  
  110.      move spaces           to reg-csv.
  111.      string 'articulo;'                delimited by size
  112.             'denominacion;'            delimited by size
  113.             'rubro;'                   delimited by size
  114.             'cant_uni; '               delimited by size
  115.             'faccionado; '             delimited by size
  116.             'kgfle; '                  delimited by size
  117.             'porcaja; '                delimited by size
  118.             'porpallet; '              delimited by size
  119.             'desprom; '                delimited by size
  120.             'hasprom; '                delimited by size
  121.             'asociado; '               delimited by size
  122.             'suspendido; '             delimited by size
  123.             'preciolibre; '            delimited by size
  124.             'costo; '                  delimited by size
  125.             'cosfec'                   delimited by size
  126.             'publico'                  delimited by size
  127.             'mayor; '                  delimited by size
  128.             'iva'                      delimited by size
  129.         into reg-csv
  130.      end-string.
  131.      write reg-csv.
  132.      
  133.      initialize artcla.
  134.      start arti key is not < artcla invalid go sale.
  135.      
  136.  leo.
  137.      read arti next at end go sale.
  138.  
  139.      initialize nivcla.
  140.      move artniv1         to nivniv1.
  141.      read nivel invalid move spaces to nivdenom.
  142.      
  143.      if artfracc-s
  144.         move "SI"         to wfraccionado
  145.      else
  146.         move "NO"         to wfraccionado
  147.      end-if.
  148.  
  149.      if artsus-s
  150.         move "SI"         to wsus
  151.      else
  152.         move "NO"         to wsus
  153.      end-if.
  154.      if artpreciolibre-s
  155.         move "SI"         to wprelibre
  156.      else
  157.         move "NO"         to wprelibre
  158.      end-if.
  159.      move artcos          to wcosto.
  160.  
  161.      move artcos-fec      to fecha-amd.
  162.      perform amd-to-dma.
  163.      perform valida-fecha.
  164.      if error-fecha = 1 or artcos-fec = zeros
  165.         move 20000101       to fecha-amd
  166.      end-if  
  167.      move fecha-amd         to xfecha.
  168.      compute wpublico rounded = artpre1 * (1 + artiva-ins / 100).
  169.      compute wmayor   rounded = artpre2 * (1 + artiva-ins / 100).
  170.  
  171.      move articulo          to csv-articulo.
  172.      move artdenom          to csv-denominacion.
  173.      move nivdenom          to csv-rubro.
  174.      move artcant-uni       to csv-cant-uni.
  175.      move wfraccionado      to csv-faccionado.
  176.      move artkgfle          to csv-kgfle.
  177.      move artporcaja        to csv-porcaja.
  178.      move artporpallet      to csv-porpallet.
  179.      move artdesprom        to csv-desprom.
  180.      move zeros             to csv-hasprom.
  181.      move artasociado       to csv-asociado.
  182.      move wsus              to csv-suspendido.
  183.      move wprelibre         to csv-preciolibre.
  184.      move wcosto            to csv-costo.
  185.      move wfecha            to csv-cosfec.
  186.      move wpublico          to csv-publico.
  187.      move wmayor            to csv-mayor.
  188.      move artiva-ins        to csv-iva.
  189.      
  190.      inspect csv-denominacion replacing all ";" by " ".
  191.      inspect csv-rubro        replacing all ";" by " ".
  192.  
  193.      inspect registro         replacing all "," by ".".
  194.  
  195.      write reg-csv from registro.
  196.      
  197.      go leo.
  198.      
  199.  sale.
  200.      close arti nivel.
  201.  
  202.      move spaces            to comando.
  203.      
  204.      string "BULK INSERT dbo.Articulos "
  205.         'FROM "c:\ARTI.CSV" '
  206.         'WITH ( '
  207.         '  FIRSTROW = 2 '
  208.         ", FIELDTERMINATOR = ';' "
  209.         ", ROWTERMINATOR = '0x0a'); "
  210.         DELIMITED BY SIZE INTO comando
  211.      end-string.  
  212.      INVOKE BD "Execute" USING comando RETURNING RETORNO.
  213.      
  214.      INVOKE BD "Disconnect" RETURNING RETORNO.
  215.                
  216.      exit program.

Cuando avance más con esto, voy pasando. Pero el ejemplo que pone Andres en el pdf que pasó, está excelentemente explicado.

Saludos.

Fito...
Fito is offline   Responder Con Cita