PL/SQL varchar(10)到varchar(9)

Joh*_*ohn 2 sql oracle plsql oracle11g

我如何编写一个循环,在循环的"in"子句中选择一个类型的col varchar(10),但是然后将这些值插入到想要它们的col中varchar(9)?基本上我试图从一个精度到另一个精度"强制转换",如果这有任何意义的话.例:

FOR V_TEN IN (SELECT THIS_IS_VARCHAR_TEN FROM TABLE WHERE SOMETHING=’VALUE’)
LOOP
                INSERT INTO OTHER_TABLE
                (THIS_IS_VARCHAR_NINE)
                VALUES
                (V_TEN);
END LOOP;
Run Code Online (Sandbox Code Playgroud)

错误是列类型不同.我试图寻找to_char()cast()但也似乎是我想要的.我意识到这里的精度有所下降,并且可以接受,因为我实际上知道varchar(10)列中的值总是9个字符.

Thi*_*ilo 10

您正在寻找SUBSTR功能.

此外,不要使用PL/SQL,普通的SQL会做得更快.

 INSERT INTO OTHER_TABLE
   SELECT OTHER_COLUMN, SUBSTR(THIS_IS_VARCHAR_TEN,1,9) 
   FROM TABLE WHERE SOMETHING=’VALUE’;
Run Code Online (Sandbox Code Playgroud)

如果实际上没有超过九个字符的值,则甚至不需要调用substr函数(它将自动转换,并且如果太长则引发错误).