我正在尝试使用游标进行动态查询,我想为数据库上的每个表创建文件组,我有这个:
DECLARE @name VARCHAR(50)
DECLARE @query VARCHAR(50)
DECLARE vend_cursor CURSOR
FOR SELECT name FROM sys.tables order by name asc
OPEN vend_cursor
FETCH NEXT FROM vend_cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'FG_'+@name
FETCH NEXT FROM vend_cursor INTO @name;
END
CLOSE vend_cursor
DEALLOCATE vend_cursor
Run Code Online (Sandbox Code Playgroud)
打印是因为这样我就可以看到文件组名称的样子,但我想添加以下内容: ALTER DATABASE AdventureWorks2012 ADD FILEGROUP FG_filegroupname
我知道我必须使用“exec sys.sp_executesql”,但是如何将其添加到我的查询中?提前致谢
我写了一个 PL/SQL 函数:-
CREATE OR REPLACE FUNCTION register_driver1(driver_name IN VARCHAR, pass_word IN VARCHAR) RETURN NUMBER AS
sql_stmt VARCHAR2(200);
driver_id NUMBER;
new_view_name VARCHAR(50);
BEGIN
sql_stmt := 'CREATE USER '||driver_name||' identified by '||pass_word;
EXECUTE IMMEDIATE sql_stmt;
sql_stmt := 'grant create session to '||driver_name;
EXECUTE IMMEDIATE sql_stmt;
driver_id := driver_ids.nextval;
new_view_name := 'vehicle_'||driver_name;
sql_stmt := 'CREATE VIEW '||new_view_name|| ' AS SELECT Model, Seats, reg_no FROM Vehicle WHERE(d_id='||driver_id||')';
EXECUTE IMMEDIATE sql_stmt;
sql_stmt := 'CREATE OR REPLACE TRIGGER reg_vehicle
INSTEAD OF INSERT ON '||new_view_name||
' …Run Code Online (Sandbox Code Playgroud) 我在 SQL Server 中编写了一个存储过程来检查数据是否存在于几个表中,如果不存在则查询将失败,但如果数据存在则它将在表 3 中插入一些数据。但我看到我得到了一个我通过变量传递的数据库名称错误。以下是错误消息。
消息 208,级别 16,状态 1,第 65 行
无效的对象名称“EMR-Integration-DEV.dbo.EMR_ADF_Variables_test”
这是我的存储过程:
CREATE PROCEDURE InsertData
@Client_Id INT,
@EMR_Id INT,
@Client_Name NVARCHAR(255),
@EMR_Name NVARCHAR(255),
@DB_Name NVARCHAR(255)
AS
BEGIN
DECLARE @Full_Table_name NVARCHAR(255);
SET @Full_Table_name = @DB_Name + '.dbo.Variable_Table_Name';
-- Check if values exist in tables in the Reference database
IF NOT EXISTS (SELECT 1 FROM Dim.Client_table WHERE ClientId = @Client_Id AND StagedName = @Client_Name)
BEGIN
PRINT 'Error: Client does not exist.';
RETURN;
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[EMR] …Run Code Online (Sandbox Code Playgroud) 我试图创建以下PL/sql但收到错误
创建新的匿名PL/SQL块:
首先,从employees表中选择员工总数,平均工资,最高工资和最低工资到PL/SQL变量.平均工资应四舍五入为整数
然后使用以下列创建表统计信息:
the_date DATE,
emp_num NUMBER
avg_sal NUMBER
max_sal NUMBER
min_sal NUMBER
Run Code Online (Sandbox Code Playgroud)然后使用上面提到的PL/SQL变量将今天的日期,员工总数,平均工资,最高工资和最低工资的值插入统计表中
我的代码:
DECLARE
v_emp_no Number;
v_av_sal Number;
v_mx_sal Number;
v_mn_sal Number;
BEGIN
SELECT count(employee_id) as total_emp, ROUND(AVG(salary))as avg_sal, MAX(salary)as max_sal, MIN(salary)as min_sal
INTO v_emp_no, v_av_sal, v_mx_sal, v_mn_sal
FROM employees;
EXECUTE IMMEDIATE 'CREATE TABLE stats (the_date DATE, emp_num NUMBER, avg_sal NUMBER, max_sal NUMBER, min_sal NUMBER)';
EXECUTE IMMEDIATE 'INSERT INTO stats values (sysdate, v_emp_no, v_av_sal, v_mx_sal, v_mn_sal)';
EXECUTE IMMEDIATE 'DROP TABLE stats';
DBMS_OUTPUT.PUT_LINE('Today our company has '||v_emp_no||' …Run Code Online (Sandbox Code Playgroud) vsql='select ename into y from emp where empno=:1'
Run Code Online (Sandbox Code Playgroud)
这是什么:1意思吗?
我正在使用动态 sql 和 pl/sql,我的想法是至少为小尺寸表的行创建通用打印程序。为了使程序正常工作,我需要找到某些列的值,因此我使用了动态 sql。查找数据的函数具有以下代码:
function find_value(p_table_name string, p_id_name string, p_id string, p_field string)
return varchar2
as
rresult varchar2(50) := '';
query_str varchar2(200);
type cur_typ is ref cursor;
c cur_typ;
inv_num number;
begin
query_str := 'select '||p_field||' from '||p_table_name||' where '||p_id_name||' = '||p_id;
open c for query_str using inv_num;
loop
fetch c into rresult;
exit when c%notfound;
end loop;
close c;
return to_char(rresult);
end;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
从第 2 行开始出错 - BEGIN --PROBNI_RED := JOB_PKG.GET_EMPLOYEE(100);
PPRINT.PRINT('EMPLOYEES','EMPLOYEE_ID',100); 结尾; 错误报告 - ORA-01006:绑定变量不存在 ORA-06512:在“ORA01.PPRINT”,第 14 …