Re: Escaping ' in a function

Поиск
Список
Период
Сортировка
От Patrick Hatcher
Тема Re: Escaping ' in a function
Дата
Msg-id OFA897BED4.49C54700-ON88256C22.0080CADC-88256C22.0081234A@fds.com
обсуждение исходный текст
Ответ на Escaping ' in a function  ("Patrick Hatcher" <PHatcher@macys.com>)
Список pgsql-novice
thank you thank you thank you thank you thank you.  I can feel my hair
growing back already.


Patrick Hatcher
Macys.Com





                      
                    Josh Berkus
                      
                    <josh@agliodbs       To:     "Patrick Hatcher" <PHatcher@macys.com>, pgsql-novice@postgresql.org
                      
                    .com>                cc:
                      
                                         Subject:     Re: [NOVICE] Escaping ' in a function
                      
                    08/27/2002
                      
                    04:13 PM
                      
                    Please respond
                      
                    to josh
                      

                      




Patrick,

> I'm trying to create a function that passes a string that will need to be
> quoted.  I finally figured out how many single quotes I needed and as a
> test, I've shown it in v_sql.  However, I now need to do the same thing
for
> my  FOR...LOOP query.

Ah, the classic qouted-quoted-quoted string problem.

Here's what I sometimes do for these procedures:

1. Build the procedure, without doubling any quotes.
2. Use search-and-replace on just the string value to double those quotes.
3. Use seach-and-replace on the whole procedure to double all quotes.

I find that this is more likely to yield me the correct number of quotes.


> CREATE or REPLACE FUNCTION recompileview(varchar) RETURNS varchar AS '
>
> DECLARE
> tblname ALIAS FOR $1;
> old_view RECORD;
> v_sql varchar;
>
> begin
> /* This is what I need */
> v_sql := ''Select * from pg_views where definition ~* '''''' ||  tblname
||
> ''''''''  ;
>
>  FOR old_view in Select * from pg_views where definition ~*
> ''''tblname''''''  LOOP

Use:
FOR old_view IN SELECT * FROM pg_views WHERE definition ~* tblname LOOP

No quotes are necessary with this version

Or:
FOR old_view IN EXECUTE v_sql LOOP


BTW, this procedure is going to cause havoc if you have views referencing
other views.  They won't necessarily be re-created in order.

--
-Josh Berkus
 Aglio Database Solutions
 San Francisco





В списке pgsql-novice по дате отправления:

Предыдущее
От: Josh Berkus
Дата:
Сообщение: Re: Escaping ' in a function
Следующее
От: "dr_sad(surguttel)"
Дата:
Сообщение: PHP & Postgres