Did you remember to also remove AS? As far as I can see from the syntax
description, AS should be used before USER, but not before ROLE, so try:

        execute statement (lsql_update_cv_itens_sub1)
          (:lvl_base, :lid_cv_itens_sub1)
          role 'perfil_vendas';

HTH,
Set


2017-08-30 23:08 GMT+02:00 hamacker [email protected]
[firebird-support] <[email protected]>:

>
>
> Something wrong in my test because 'sintax error' when I try role name
> without username/password.
> Can you help me?
>
>
> EXECUTE BLOCK
> returns (result_value Integer)
> AS
> declare variable lid_cv bigint=3;
> declare variable lcoditem varchar(30)='(C120P2AC)';
> declare variable lvl_base NUMERIC(18,2)=            100.00;
> declare variable lid_cv_item bigint;
> declare variable lid_cv_itens_sub1 bigint;
> declare variable lid_cv_itens_sub2 bigint;
> declare variable lcvi_coditem varchar(30);
> declare variable lsub1_coditem varchar(30);
> declare variable lsub2_coditem varchar(30);
> declare variable lsql_update_cv_itens varchar(4096);
> declare variable lsql_update_cv_itens_sub1 varchar(4096);
> declare variable lsql_update_cv_itens_sub2 varchar(4096);
> begin
>   lsql_update_cv_itens='update cv_itens set vl_base=? where
> (id_cv_item=?);';
>   lsql_update_cv_itens_sub1='update cv_itens_sub1 set vl_base=? where
> (id_cv_itens_sub1=?);';
>   lsql_update_cv_itens_sub2='update cv_itens_sub2 set vl_base=? where
> (id_cv_itens_sub2=?);';
>   result_value=0;
>   for select id_cv_item, coditem from cv_itens
>   where id_cv=:lid_cv
>   into :lid_cv_item, :lcvi_coditem do
>   begin
>     if (:lcvi_coditem=:lcoditem) then
>     begin
>       execute statement (lsql_update_cv_itens)
>         (:lvl_base, :lid_cv_item)
>         as user 'SYSDBA' password 'masterkey' role 'perfil_vendas'; --
> sintaxe error when remove user and password
>       result_value=(result_value+1);
>     end
>     for select id_cv_itens_sub1, coditem from cv_itens_sub1
>     where id_cv_item=:lid_cv_item
>     into :lid_cv_itens_sub1, :lsub1_coditem  do
>     begin
>       if (:lsub1_coditem=:lcoditem) then
>       begin
>         execute statement (lsql_update_cv_itens_sub1)
>           (:lvl_base, :lid_cv_itens_sub1)
>           as user 'SYSDBA' password 'masterkey' role 'perfil_vendas'; --
> sintaxe error when remove user and password
>         result_value=(result_value+1);
>       end
>       for select id_cv_itens_sub2, coditem from cv_itens_sub2
>       where id_cv_itens_sub1=:lid_cv_itens_sub1
>       into :lid_cv_itens_sub2, :lsub2_coditem do
>       begin
>         if (:lsub2_coditem=:lcoditem) then
>         begin
>           execute statement (lsql_update_cv_itens_sub2)
>             (:lvl_base, :lid_cv_itens_sub2)
>             as user 'SYSDBA' password 'masterkey' role 'perfil_vendas'; --
> sintaxe error when remove user and password
>           result_value=(result_value+1);
>         end
>       end
>     end
>   end
>   suspend;
> end
>
>
> 2017-08-30 16:33 GMT-03:00 Dimitry Sibiryakov [email protected]
> [firebird-support] <[email protected]>:
>
>> 30.08.2017 21:15, hamacker [email protected] [firebird-support]
>> wrote:
>> > Here in fb3, to put role name in execute, Its mandatory put username
>> and password too.
>>
>>    I was wrong a little, but still you should read the documentation:
>>
>> > - if ON EXTERNAL DATA SOURCE clause is omitted then
>> >       a) statement will be executed against current (local) database
>> >       b) if AS USER clause is omitted or <user_name> equal to
>> CURRENT_USER
>> >       and if ROLE clause is omitted or <role_name> equal to CURRENT_ROLE
>> >       then the statement is executed in current connection context
>> >       c) if <user_name> is not equal to CURRENT_USER or <role_name> not
>> equal to CURRENT_ROLE
>> >       then the statement is executed in separate connection established
>> inside the same
>> >       engine instance (i.e. created new internal connection without
>> Y-Valve and remote layers).
>>
>>
>
> 
>

Reply via email to