执行立即错误

时间:2019-08-12 15:23:07

标签: amazon-redshift plpgsql

我正在使用Amazon RedShift SQL(许多年前曾使用Oracle),并且在尝试立即执行时,遇到的语法错误一直存在。我什至从PostgreSQL文档页面复制并发布了代码(例如使用sprintf),但无济于事。我认为以下应该可以工作...?

declare 
  stm varchar(200);
begin
  stm =  'GRANT SELECT, INSERT, TRIGGER, UPDATE, DELETE, REFERENCES, RULE ON public.angus TO adcd;';
  execute immediate stm;
end;

Amazon无效操作:“ varchar”处或附近的语法错误

2 个答案:

答案 0 :(得分:0)

有两个问题:

  1. 您使用的EXECUTE IMMEDIATE在PostgreSQL文档中找不到,因为它是Oracle语法。 PL / pgSQL语句为EXECUTE

  2. 您正在尝试将PL / pgSQL代码作为SQL语句执行,这将无法正常工作。

    使用DO语句:

    DO $$DECLARE
       ...
    END;$$;
    

答案 1 :(得分:0)

独立匿名块的语法略有不同,代码实际上也以字符串形式提交。请参见Postgres DO,然后搜索“美元报价”。试试

%Example 1: A(:,:,1:3,1:3,1:3}
%elements per dimension 
n = 4;
%number of dimension
d = 5;
%random matrix
repdim = repmat({n},d,1)
A = rand(repdim{:});
%We want A(:,:,1:3,1:3,1:3}, so we create c = {1:3,1:3,1:3}
c = repmat({1:n-1},d-2,1);
%Get the new matrix
A = A(:,:,c{:});


%Example 2: A(1:3,1:3,:,:,:}
%elements per dimension 
n = 4;
%number of dimension
d = 5;
%random matrix
repdim = repmat({n},d,1)
A = rand(repdim{:});
%We want A(1:3,1:3,:,:,:}, so we create c1 = {1:3,1:3} and c2 = {':',':',':'}
c1 = repmat({1:n-1},2,1);
c2 = repmat({':'},d-2,1); %thanks to @LuisMendo for the suggestion.
%Get the new matrix
A = A(c1{:},c2{:});