我正在使用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”处或附近的语法错误
答案 0 :(得分:0)
有两个问题:
您使用的EXECUTE IMMEDIATE
在PostgreSQL文档中找不到,因为它是Oracle语法。 PL / pgSQL语句为EXECUTE
。
您正在尝试将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{:});