PL/SQL Developer 执行以下PL/SQL语句:
--创建无参存储过程
CREATE OR REPLACE FUNCTION CreateTables RETURN VARCHAR2 IS
--声明语句段
v_SQL varchar2(10000);
BEGIN
--执行语句段
/*
Create by zjc 2012-06-29
指标分解总表*/v_SQL := '
create table TB_TGT_DECOM_TABLES
(
id VARCHAR2(40) not null,
prod_type NUMBER(4),
designer VARCHAR2(40),
year NUMBER(5),
name VARCHAR2(40),
pro_comment VARCHAR2(200)
)
';execute immediate v_SQL;commit;END CreateTables;
declare
str varchar2(1000);
CURSOR tname_cursor IS
SELECT table_name
FROM user_tables
where table_name like 'TB_TGT_%';
begin
CreateTables();
END; 执行中无错误发生,然后新开一个窗口查询自己新建的表: SELECT table_name
FROM user_tables
where table_name like 'TB_TGT_%';
什么结果也查询不到。直接使用创建表的语句:
create table TB_TGT_DECOM_TABLES
(
id VARCHAR2(40) not null,
prod_type NUMBER(4),
designer VARCHAR2(40),
year NUMBER(5),
name VARCHAR2(40),
pro_comment VARCHAR2(200)
)
这个倒是可以查询得到新建的表。为何用PL/SQL语句建表不成功呢?
--创建无参存储过程
CREATE OR REPLACE FUNCTION CreateTables RETURN VARCHAR2 IS
--声明语句段
v_SQL varchar2(10000);
BEGIN
--执行语句段
/*
Create by zjc 2012-06-29
指标分解总表*/v_SQL := '
create table TB_TGT_DECOM_TABLES
(
id VARCHAR2(40) not null,
prod_type NUMBER(4),
designer VARCHAR2(40),
year NUMBER(5),
name VARCHAR2(40),
pro_comment VARCHAR2(200)
)
';execute immediate v_SQL;commit;END CreateTables;
declare
str varchar2(1000);
CURSOR tname_cursor IS
SELECT table_name
FROM user_tables
where table_name like 'TB_TGT_%';
begin
CreateTables();
END; 执行中无错误发生,然后新开一个窗口查询自己新建的表: SELECT table_name
FROM user_tables
where table_name like 'TB_TGT_%';
什么结果也查询不到。直接使用创建表的语句:
create table TB_TGT_DECOM_TABLES
(
id VARCHAR2(40) not null,
prod_type NUMBER(4),
designer VARCHAR2(40),
year NUMBER(5),
name VARCHAR2(40),
pro_comment VARCHAR2(200)
)
这个倒是可以查询得到新建的表。为何用PL/SQL语句建表不成功呢?
请问创建function的语句和调用functin的语句是不是需要分开两步执行啊?
能不能一步执行呢?分两步执行多麻烦啊!PL/SQL还号称过程化的sql语句呢,创建function的语句和调用functin的语句还需要分两步执行。应该像C语言一样,定义了一个函数,然后所有函数都在main函数里执行,一次执行就行,类似于:
void a(void)
{}void b(void)
{}void main(void)
{
a();
b();
}
这时就需要要在Execute之前先grant create table to user;