[英]How to store a result of SQL as an variable and use it in the later SQL commands in PostgreSQL
[英]How to save result from sql query to a variable and later use it in the script?
我有以下脚本:
cl scr;
variable l number;
begin
select max(length(name)) into :l from goodcustomer;
end;
/
--print :l;
alter table goodcustomer modify name varchar2(:l);
我正在尝试将名称属性的长度修改为表中当前存在的名称的最大长度(即 17)。 上面的代码在 sql 开发人员中给了我以下错误:
Error report -
SQL Error: ORA-00910: specified length too long for its datatype
00910. 00000 - "specified length too long for its datatype"
*Cause: for datatypes CHAR and RAW, the length specified was > 2000;
otherwise, the length specified was > 4000.
*Action: use a shorter length or switch to a datatype permitting a
longer length such as a VARCHAR2, LONG CHAR, or LONG RAW
我在这里做错了什么? 不是可以用于给出varchar2大小的数字吗? 任何其他实现相同目标的方法也将受到赞赏?
也许您可以使用动态 SQL 。 示例(Oracle 18c):
桌子
SQL> create table goodcustomer ( name varchar2( 4000 ) ) ;
Table created.
SQL>
SQL> describe goodcustomer
Name Null? Type
NAME VARCHAR2(4000)
插入一些名字
SQL> begin
2 insert into goodcustomer values( 'shortestname' ) ;
3 insert into goodcustomer values( 'l o n g e s tname' ) ;
4 end ;
5 /
PL/SQL procedure successfully completed.
SQL> select max( length( name ) ) from goodcustomer ;
MAX(LENGTH(NAME))
17
改变表...修改
SQL> declare
2 l number := 0 ;
3 sqlstr varchar2( 4000 ) := '' ;
4 begin
5 select max( length( name ) ) into l from goodcustomer ;
6 sqlstr := 'alter table goodcustomer modify name varchar2( '
7 || to_char( l )
8 || ')' ;
9 execute immediate sqlstr ;
10 end ;
11 /
PL/SQL procedure successfully completed.
-- The NAME column now: VARCHAR2( 17 )
SQL> describe goodcustomer
Name Null? Type
NAME VARCHAR2(17)
附加阅读,可能会为您澄清一些事情(替换与绑定变量),请参见此处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.