Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problemas con Función en Postgresql

Estas en el tema de Problemas con Función en Postgresql en el foro de PostgreSQL en Foros del Web. Hola buenos días, nuevamente solicitando de su ayuda... tengo elaborada la siguiente función: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE FUNCTION Consul_CBPartner ( ...
  #1 (permalink)  
Antiguo 03/12/2012, 10:23
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
Puntos: 19
Exclamación Problemas con Función en Postgresql

Hola buenos días, nuevamente solicitando de su ayuda... tengo elaborada la siguiente función:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION Consul_CBPartner() RETURNS INTEGER AS
  2. $BODY$
  3. DECLARE
  4. reg_table record;
  5. COUNT INTEGER;
  6. al text;
  7. countsql text;
  8. l_into text;
  9. BEGIN
  10. 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 <> ''C_BPartner'' And ac.IsActive = ''Y''';
  11. COUNT := 0;
  12. FOR reg_table IN EXECUTE al
  13. loop
  14.     EXECUTE 'Select Count(*) as TotalTabla From '|| reg_table.TableName ||' Where C_BPartner_ID = 1004008';
  15.     Raise Notice '% %', reg_table.TableName, TotalTabla;
  16. COUNT := COUNT + 1;
  17. END loop;
  18. RETURN COUNT;
  19. END;
  20. $BODY$
  21.   LANGUAGE plpgsql

Lo que quiero hacer es que me muestre la tabla que se esta recorriendo y la cantidad de registros "TotalTabla" en cada tabla segun el filtro que le estoy enviando.

así como esta me sale este error: "ERROR: column "totaltabla" does not exist"

Espero me puedan ayudar.. me urge resolver ese problemita.!!
  #2 (permalink)  
Antiguo 03/12/2012, 10:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problemas con Función en Postgresql

totaltabla es un alias, no una variable. En esa sentencia debe haber una asignación con la sentencia INTO.

De todas formas, no encuentro que quieres hacer con ese PL
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/12/2012, 13:00
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
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.!!

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:31.