job里面执行DDL语句

Oracle序列与Job自动化

项目中用到几个编号。之前曾经做了 根据序列去取值,然后在程序中 去组合字符串生成编号,但是总觉得不怎么好、后来干脆每天把序列删了重建。采用Oracle 的 的job 来定期执行该任务。

1 创建序列

  

create sequence houseno increment by 1 start with 1 maxvalue 1000; 

 

2 创建过程


create or replace procedure housenopro
 as
   tsql   varchar2(100);
Begin
  tsql:=' drop sequence houseno ';
  execute immediate tsql;
  tsql:='create sequence houseno increment by 1 start with 1 maxvalue 1000';
  execute immediate tsql;
  end;
/

 

 3 建立job

variable housenojob number;
BEGIN
DBMS_JOB.SUBMIT(:housenojob,'housenopro;',sysdate,'sysdate+1'); 
COMMIT;
END;
/

 

 

4执行job

variable housenojob number;
BEGIN
DBMS_JOB.SUBMIT(:housenojob,'housenopro;',sysdate,'sysdate+1'); 
COMMIT;
END;
/

 

注意,在执行2 的时候 会出现错误提示,说当前权限不够,经过多番搜索,发现了一个问题。

原来 在 Oracle 中。如果想在 匿名块 或者过程 中来执行DDL 语句时。都必须先 要把 相对应的权限(比如 create table , drop table ,create sequence ,drop sequence ,Create public synonym,
  Drop public synonym ,Create trigger,Create View, 等)直接赋给该用户,之前通过角色的授权将会失效。 

 

所以 应先登录到管理员上面。给你的当前用户授权。

Grant Create Table,Create sequence, Create trigger, 
  Create procedure, Drop any sequence, Create public synonym, 
  Drop public synonym to aws

 

之后,一切 ok。  之前问同事说 不能动态执行DDL 语句,因为需求有时候需要在程序中去创建一些东西,以后赋予相对应的权限就行了。

<think>好的,我现在需要帮助用户了解如何在Kettle中执行SQL语句,包括方法和配置教程。首先,我得回忆一下Kettle的基本操作和相关组件。 用户提到了执行SQL语句,这在Kettle中通常是通过“执行SQL脚本”步骤或者数据库连接来实现的。我记得Kettle中的转换和作业有不同的处理方式,可能需要分别说明。比如,在转换中可以使用“表输入”或“执行SQL脚本”,而作业中可能有专门的SQL步骤。 接下来,我需要考虑具体的步骤配置。例如,建立数据库连接是基础,用户可能需要知道如何配置JDBC连接,填写主机、端口、数据库名、用户和密码等信息。然后,在转换中添加“执行SQL脚本”步骤,并填写SQL语句或者指定SQL文件路径。 用户可能还会遇到参数传递的问题,比如如何动态设置SQL语句中的变量。这里需要引用用户提供的引用内容中的参数使用方法,比如使用${变量名},并且可能在作业中通过“设置变量”步骤来传递参数。例如,用户提到的引用[2]中使用了parent_job.getVariable和setVariable来处理变量,这可能涉及到在SQL脚本中替换参数。 另外,执行SQL文件而不是直接在步骤中写语句的情况,用户可能需要知道如何指定外部SQL文件路径。同时,日志记录和错误处理也是重要的部分,比如引用[1]中的命令行示例里将日志输出到文件,可能需要指导用户如何配置日志记录。 还需要考虑的是不同类型的SQL语句,比如DDL和DML,以及事务处理。例如,执行DDL时自动提交的问题,或者执行多个DML时需要事务支持,这时候可能需要配置数据库连接的事务属性。 用户可能遇到的常见问题,比如路径中的空格问题,如引用[2]中提到的,在获取文件路径时需要去除空格,否则会导致找不到文件的错误。这时候需要提醒用户注意路径处理,或者在配置时检查路径是否正确。 最后,生成相关问题时,需要围绕Kettle执行SQL的不同方面,比如参数传递、执行文件、事务处理、日志优化等,确保问题能够覆盖用户可能进一步的需求。</think>### Kettle执行SQL语句的配置方法 #### 一、基础配置步骤 1. **创建数据库连接** - 在转换或作业视图右击`DB连接`新建 - 填写连接信息: ```ini 连接类型=MySQL 主机名=localhost 数据库名=test_db 端口=3306 用户名=root 密码=***** ``` - 测试连接成功后保存[^1] 2. **在转换中执行SQL** - 拖拽`执行SQL脚本`步骤到画布 - 配置属性: ```ini 数据库连接=已创建的DB连接 SQL脚本=INSERT INTO logs VALUES(CURRENT_TIMESTAMP, '操作记录') ``` - 支持参数化查询: ```sql UPDATE books SET price=${NEW_PRICE} WHERE id=? ``` 使用`?`占位符时需在`参数`选项卡绑定字段 #### 二、高级配置技巧 1. **动态SQL文件执行** - 通过`从文件读取脚本`选项加载外部SQL - 路径处理示例(注意空格问题): ```javascript var cleanPath = path.replace(/^\s+/, ''); // 引用[2]中的路径处理方案 ``` - 支持变量替换: ```sql CREATE TABLE ${TABLE_NAME} (id INT PRIMARY KEY) ``` 2. **事务控制配置** - 在数据库连接高级设置中启用: ```ini 自动提交=false 事务隔离级别=READ_COMMITTED ``` - 配合`提交`/`回滚`步骤实现批量操作 #### 三、作业调度集成 ```python # 类似引用[1]的调度命令优化方案 ./kitchen.sh -file=/etl/update_books.kjb -param:START_DATE=$(date +%Y-%m-%d) >> /logs/etl.log ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值