这个不好说了,你找一本pl/sql的书看看
解决方案 »
- 含有lob,如何在INTERVAL分区中将lob和data分开循环存储?
- 如何在分页上加关联表查询哇?
- oracle 内置函数升级问题
- oracle中在已经创建好的标中制定位置增加字段的sql语句怎么写,谢谢!在线等......
- 如何能查出表中不存在的数据
- 关于oracle的 like '%test%'和instr(char1,'语')在oracle查询中的比较问题?是内部编码的比较还是?
- 如何修改v$parameter视图中某一参数的值?
- 关于动态sql的问题(急)
- java链接oracle数据库返回结果集问题
- 定时执行任务
- 我在看一本关于Oracle的英文书,有些不懂的,请高手指教!
- 请教我这个表该怎么建,在线等候,100分相送
as
l_change_sw number(3);
l_change_it varchar2(1);
cursor ac_cur
is
select distinct pref_3 from phone_nbr
where area_code = oac;
begin
for ac_rec in ac_cur
loop
l_change_it := 'N';
begin
select '' into l_change_sw
from static_exc
where area code = oac
and pref_3 = ac_rec.pref_3;
exception
when no_data_found then
l_change_it := 'Y';
end;
if l_change_it = 'Y' then
update phone_nbr set area_code = nac
where area_code = oac
and pref_3 = ac_rec.pref_3;
end if;
end loop;
end;
/
/*-------------------------------------------------------------------------*/
/* 公用过程函数描述 */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------
|| 函数名称 :将CHAR字段转换为VARCHAR2型
|| 功能描述 :将表中CHAR字段转换为VARCHAR2型,并对转换的字段做TRIM()
||
|| 参数描述 :参数标识 名称 输入输出 类型
|| -------------------------------------------------------------
|| prm_tablename 表名 输入 VARCHAR2,
||
|| 返回值: Result 执行结果 返回 VARCHAR2,-------------------------------------------------------------------------*/ Result VARCHAR2(32);
CURSOR c_col IS
SELECT column_name, data_length, nullable FROM cols WHERE table_name = upper(prm_tablename) AND data_type = 'CHAR' ORDER BY column_id; s_alter_sql VARCHAR2(4000) := '';
s_update_sql VARCHAR2(4000) := '';
s_alter_execute_sql VARCHAR2(4000);
s_update_execute_sql VARCHAR2(4000);
s_nullable VARCHAR2(32);
n_cursor NUMBER ;
i_return INTEGER;
i_columns INTEGER := 0;
begin
FOR rec_col IN c_col LOOP
IF rec_col.nullable = 'Y' THEN
s_nullable := '';
ELSE
s_nullable := ' NULL';
END IF;
s_alter_sql := s_alter_sql || rec_col.column_name || ' VARCHAR2(' || rec_col.data_length ||')' || s_nullable || ',';
s_update_sql := s_update_sql || rec_col.column_name || '=TRIM(' || rec_col.column_name ||'),';
i_columns := i_columns + 1;
END LOOP; IF i_columns = 0 THEN
prm_return := '0';
RETURN;
END IF;
s_alter_execute_sql := 'ALTER TABLE ' || prm_tablename || ' MODIFY(' || substr(s_alter_sql, 1, length(s_alter_sql) - 1) || ')';
s_update_execute_sql := 'UPDATE ' || prm_tablename || ' SET ' || substr(s_update_sql, 1, length(s_update_sql) - 1); --dbms_output.put_line(s_alter_execute_sql);
n_cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE ( n_cursor, s_alter_execute_sql, DBMS_SQL.V7 );
i_return := DBMS_SQL.EXECUTE( n_cursor );
DBMS_SQL.CLOSE_CURSOR ( n_cursor ); --dbms_output.put_line(s_update_execute_sql);
n_cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE ( n_cursor, s_update_execute_sql, DBMS_SQL.V7 );
i_return := DBMS_SQL.EXECUTE( n_cursor );
DBMS_SQL.CLOSE_CURSOR ( n_cursor );
COMMIT; prm_return := i_columns || ' | ' || i_return;
RETURN;
end prc_char_to_varchar2;