问题一:
我有一个view,想在里面添加参数来查询,在网上找到一种方法是用包修改全局变量然后view再去调用全局变量来实现的
以下是创建包的语句,报错pls-00103:Encountered the symbol "create",指向第五行
网上说要在第五行之前加‘/’,加完之后又报错 pls-00103:Encountered the symbol "/",为什么会这样呢?1.CREATE OR REPLACE PACKAGE PKG_REPORT AS
2. FUNCTION GET_VALUE RETURN VARCHAR2;
3. PROCEDURE SET_VALUE(PS_TIME IN VARCHAR2);
4.END PKG_REPORT;
5.CREATE OR REPLACE PACKAGE BODY PKG_REPORT IS
6.M_V VARCHAR2(6);
7.PROCEDURE SET_VALUE(PS_TIME IN VARCHAR2) IS BEGIN M_V:=PS_TIME; END;
8.FUNCTION GET_VALUE RETURN VARCHAR2 IS BEGIN RETURN M_V; END;
9.END PKG_REPORT;
问题二:
假设上面的包添加成功了之后
我在查询的时候应该怎么调用这个包去修改全局变量呢?写在查询的sql里面么?应该怎么写
例如有个view A;里面的参数是PKG_REPORT.GET_VALUE()
现在想select * from A,那PKG_REPORT.SET_VALUE('2010')这个语句应该写在哪里?
我有一个view,想在里面添加参数来查询,在网上找到一种方法是用包修改全局变量然后view再去调用全局变量来实现的
以下是创建包的语句,报错pls-00103:Encountered the symbol "create",指向第五行
网上说要在第五行之前加‘/’,加完之后又报错 pls-00103:Encountered the symbol "/",为什么会这样呢?1.CREATE OR REPLACE PACKAGE PKG_REPORT AS
2. FUNCTION GET_VALUE RETURN VARCHAR2;
3. PROCEDURE SET_VALUE(PS_TIME IN VARCHAR2);
4.END PKG_REPORT;
5.CREATE OR REPLACE PACKAGE BODY PKG_REPORT IS
6.M_V VARCHAR2(6);
7.PROCEDURE SET_VALUE(PS_TIME IN VARCHAR2) IS BEGIN M_V:=PS_TIME; END;
8.FUNCTION GET_VALUE RETURN VARCHAR2 IS BEGIN RETURN M_V; END;
9.END PKG_REPORT;
问题二:
假设上面的包添加成功了之后
我在查询的时候应该怎么调用这个包去修改全局变量呢?写在查询的sql里面么?应该怎么写
例如有个view A;里面的参数是PKG_REPORT.GET_VALUE()
现在想select * from A,那PKG_REPORT.SET_VALUE('2010')这个语句应该写在哪里?
CREATE OR REPLACE PACKAGE PKG_REPORT AS
FUNCTION GET_VALUE RETURN VARCHAR2;
PROCEDURE SET_VALUE(PS_TIME IN VARCHAR2);
END PKG_REPORT;
/
CREATE OR REPLACE PACKAGE BODY PKG_REPORT IS
M_V VARCHAR2(6);
PROCEDURE SET_VALUE(PS_TIME IN VARCHAR2) IS
BEGIN
M_V := PS_TIME;
END;
FUNCTION GET_VALUE RETURN VARCHAR2 IS
BEGIN
RETURN M_V;
END;
END PKG_REPORT;
/第二个问题:在执行select * from A之前,先执行:
exec pkg_report.set_value('2010');
然后写:select * from A;
这样就OK了!
begin
pkg_report.SET_VALUE('B');
end;
来设定变量值
select pkg_report.GET_VALUE from dual;
来取值。
需要注意的是这个全局变量的全局仅限当前会话里。