Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/12/2012, 13:00
Avatar de jlct
jlct
 
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Respuesta: Problemas con Función en Postgresql

Gracias a tu aclaración logre solventar ese problema. acá les dejo la función:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION Consul_CBPartner(cbpartnerid1 INT, cbpartnerid2 INT) RETURNS INTEGER AS
  2. $BODY$
  3. DECLARE
  4. reg_table record;
  5. reg_tablename record;
  6. COUNT INTEGER;
  7. al text;
  8. countsql text;
  9. l_into text;
  10. BEGIN
  11. al := 'Select adt.tablename,adt.name,ac.name,ac.columnname From AD_Column ac Join AD_Table  adt  On ac.AD_Table_ID = adt.AD_Table_ID Join information_schema.Columns infc On infc.Table_Name = lower(adt.TableName) And lower(ac.ColumnName) = infc.Column_Name Where ac.ColumnName = ''C_BPartner_ID'' And adt.IsView <> ''Y'' And ac.ColumnSql is null And adt.TableName not in (''C_BPartner'',''C_Bp_Customer_Acct'') And ac.IsActive = ''Y''';
  12. COUNT := 0;
  13. FOR reg_table IN EXECUTE al
  14. loop
  15.     countsql := 'Select Count(*) as TotalTabla From '|| reg_table.TableName ||' Where C_BPartner_ID = '|| cbpartnerid1 ||'';
  16.     FOR reg_tablename IN EXECUTE countsql
  17.     loop
  18.         --Raise Notice '% %', reg_table.TableName, reg_tablename.TotalTabla;
  19.         EXECUTE 'Update '|| reg_table.TableName ||'  set C_BPartner_ID = '|| cbpartnerid2 ||' where C_BPartner_ID = '|| cbpartnerid1 ||'';
  20.     END loop;
  21. COUNT := COUNT + 1;
  22. END loop;
  23. RETURN COUNT;
  24. END;
  25. $BODY$
  26.   LANGUAGE plpgsql
  27.  
  28. SELECT Consul_CBPartner(1004008,1003854)

aunque aun tengo un problemita menos grave, tengo un apostrofe de mas en esta parte:

Código SQL:
Ver original
  1. 'Select adt.tablename,adt.name,ac.name,ac.columnname From AD_Column ac Join AD_Table  adt  On ac.AD_Table_ID = adt.AD_Table_ID Join information_schema.Columns infc On infc.Table_Name = lower(adt.TableName) And lower(ac.ColumnName) = infc.Column_Name Where ac.ColumnName = ''C_BPartner_ID'' And adt.IsView <> ''Y'' And ac.ColumnSql is null And adt.TableName not in (''C_BPartner'',''C_Bp_Customer_Acct'') And ac.IsActive = ''Y''';

no logro ver en donde es.. si puedes echarle un vistazo.!!