当前位置: 首页 > 知识库问答 >
问题:

如何在execute immediate语句中使用cursor变量更改表

丁英韶
2023-03-14

我在PS服务器上有7个表,它们有过去3年的数据(数十亿条记录)。要求将所有数据移动到备份表中,但上个月的数据除外。因此,我们的做法是:

  • 1) 将现有表名更改为备份表的步骤
  • 2) 然后创建新表
  • 3) 然后将3个月的数据移动到新表中

这样数据处理会很快。

我尝试使用下面的查询来更改表名,但不起作用。有人能帮忙吗。这是高度优先事项。

declare 
 sql_stmt varchar2(1000); 
 cursor c1 is select table_name from staging_clear; 
 type t1 is table of c1%rowtype; 
 curtype t1;
 begin 
 open c1; 
 fetch c1 bulk collect into curtype;  
 for i in 1..curtype.count loop  
 sql_stmt:= 'begin 
          alter table  '||curtype(i).table_name||' rename to '|| curtype(i).table_name||'_bkp';
          dbms_output.put_line(sql_stmt);
   execute immediate sql_stmt; 
   dbms_output.put_line(sql_stmt); 
  end loop;  
 end;

错误报告:

ORA-06550:第2行,第11列:PLS-00103:在预期以下情况之一时遇到符号“ALTER”:开始案例声明退出goto如果循环mod null pragma raise return选择更新

共有1个答案

公良玺
2023-03-14

语句被破坏了:只需编写“altertable”并忘记“begin”

sql_stmt:= 'alter table  '||curtype(i).table_name||' rename to '|| curtype(i).table_name||'_bkp';
 类似资料:
  • 问题内容: 我正在使用R来调用mySQL语句,其中我在语句外定义了变量,例如 但这会返回一个空集,我已经在Google周围搜索并尝试了“。&foo”。“ .foo。” ‘。&& foo。’‘和许多不同的组合,但是它们都不起作用,我认为这应该是mysql问题,而不是我遇到的R特定问题,但不确定。通常,变量具有$值,但R中没有。 问题答案: 这应该工作:

  • 问题内容: 好的,所以我在Python方面没有那么丰富的经验。 我有以下Python代码: 其中是整数,&是字符串。 如何在没有python的情况下编写变量名称,并将其作为查询文本的一部分? 问题答案: 请注意,参数作为元组传递。 数据库API会正确地对变量进行转义和引用。注意不要使用字符串格式运算符(),因为 它不会进行任何转义或引用。 它容易受到不受控制的字符串格式攻击,例如SQL注入。

  • 问题内容: 我正在尝试创建一个查询,该查询将针对中的每个服务器中特定数据库中的特定表执行一次。 对于每个我想知道的内容。 所以我需要的是这样的: 然而,在似乎并不工作。 有什么建议吗?感谢您与我一起思考。 问题答案: 您必须使用动态sql: 这是有关exec的更多信息。

  • 问题内容: 我有以下Python代码: 其中是整数,是字符串。 如何在没有python的情况下编写变量名并将其作为查询文本的一部分? 问题答案: 请注意,参数作为元组传递。 数据库API会正确地对变量进行转义和引用。注意不要使用字符串格式运算符(%),因为 它不会进行任何转义或引用。 它容易受到不受控制的字符串格式攻击,例如SQL注入。

  • 问题内容: 如何在执行Update语句时设置变量?我似乎无法弄清楚语法。 所以我想要下面这样的东西,但是它说语法是错误的: 问题答案: 这个有可能 :- 设置整数(不递增)

  • 我是编码的新手。我想在我当前的代码中添加更多的变量。现在,如果你输入“dog”,它就会打开YouTube。例如,你如何添加另一个变量,这样,如果你输入dog,它仍然会打开youtube,但如果你输入“cat”,它会打开Netflix?你是怎么做到的?感谢所有帮助你的人。请记住,我仍然是一个新的编码,所以请不要批评。