public class TableColorRenderer extends JLabel implements TableCellRenderer
{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
return this;
}
我有一个程序来管理表FOR rec IN ( SELECT Procedure_Name
FROM DATAMART_PROCESS_STEPS
ORDER BY Procedure_Order )
LOOP
EXECUTE rec;
END LOOP;
中的一系列过程,我需要动态地运行该表中的每个过程。 Oracle SQL Developer不喜欢我执行程序的方式;它会引发语法错误。实现这项任务的正确方法是什么?
DATAMART_PROCESS_STEPS
在阅读了有关存储过程的教程之后,我也尝试了这个,但它有单引号的问题。救命。如果您需要更多细节或代码,请询问。
提前谢谢。
答案 0 :(得分:4)
execute
command是匿名PL / SQL块的SQL * Plus / SQL Developer简写。它在其他PL / SQL中无效,包括在主程序中。
PL / SQL中的动态调用使用不相关的execute immediate
statement,并且语法图显示立即关键字不是可选的。
在这种情况下,动态SQL语句需要是一个围绕游标提供的过程名称的匿名PL / SQL块,正如您已经意识到的那样。但是你的第二个版本在END
连接到字符串之后缺少分号;并且您直接引用rec
而不是该记录类型中的列,即使用光标所选列的名称。
所以你的循环需要做:
FOR rec IN ( SELECT Procedure_Name
FROM DATAMART_PROCESS_STEPS
ORDER BY Procedure_Order )
LOOP
EXECUTE IMMEDIATE 'BEGIN ' || rec.procedure_name || '; END;';
END LOOP;