用sql管理文件目录(疯狂的视图)
SQLHUB的
3.0.0中的视图做了重大改进:
o 支持触发器
o 支持数据权限
o 允许在
insert、update和delete语句中操作
o 支持索引
使用这些新特性我们能实现可管理的虚拟化视图,下面举个例子:
1. 首先执行以下
sql,创建一个视图
--
文件目录虚拟视图
create or replace view mydir as
begin
select name from sys.file( 'd://mydir' ) where type= 'FOLDER' ;
end;
create or replace view mydir as
begin
select name from sys.file( 'd://mydir' ) where type= 'FOLDER' ;
end;
查询上面的视图会返回d:/mydir目录下的所有子目录

Select * from mydir
+------+
| NAME |
+------+
| F1 |
| F2 |
+------+
2. 我们为mydir视图加一个触发器,sql语句如下:
--
文件目录虚拟视图触发器
create
or replace trigger mydir_trigger for mydir as
begin
-- 基础目录
v_dir := 'd://mydir//' ;
if type= 'BEFORE_INSERT' then
-- 创建目录
oscmd( 'cmd /c md ' + v_dir + new.name);
else if type = 'BEFORE_DELETE' then
-- 删除目录
oscmd( 'cmd /c rd ' + v_dir + new.name);
else if type = 'BEFORE_UPDATE' then
-- 重命名目录
oscmd( 'cmd /c rename ' + v_dir + old.name + ' ' + new.name);
end if;
end;
begin
-- 基础目录
v_dir := 'd://mydir//' ;
if type= 'BEFORE_INSERT' then
-- 创建目录
oscmd( 'cmd /c md ' + v_dir + new.name);
else if type = 'BEFORE_DELETE' then
-- 删除目录
oscmd( 'cmd /c rd ' + v_dir + new.name);
else if type = 'BEFORE_UPDATE' then
-- 重命名目录
oscmd( 'cmd /c rename ' + v_dir + old.name + ' ' + new.name);
end if;
end;
上面的触发器截获了insert、update和delete操作,并做了相应处理。
3. 下面我们对视图执行dml操作,看效果:
insert into mydir (name) values ('test');

update mydir set name=name+'123'

delete from mydir

上面只是一个小例子,但意味着我们能用sql来管理非数据的对象。