我不能在我的代码中使用位置绑定。
我的代码:
value ="Some value"
cur.execute("Select * from TABLENAME where FIELD like '%:1%' ",{'1':value})
错误:
cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
有没有可能做
alter session set current_schema=MySchema;
在包裹里?
我们的Oracle应用程序调用asp.net包。我们希望使用不是MySchema所有者的Oracle用户连接到数据库。为此,我们将Other_User上的execute权限授予MyPackage包。
示例:
grant execute on MySchema.MyPackage to Other_User
但是,当web app连接到Oracle并试图执行MyPackage的存储过程时,由于表不属于Other_User,它得到了错误。
避免错误的一种方法是创建同义词,但我们更倾向于使
寻找在execute immediate语句中绑定oracle参数的可能性。但是现在面临的问题是,由于Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01008: not all variables bound exception,我无法在一个语句中执行多个查询。经过研究,我不知道是否有可能做到这一点。
var cmd = new OracleCommand
{
CommandText = "begin " +
我在Oracle中看到了许多这样的例子。对我来说就是行不通。Oracle11。我在第15行收到这个错误。谢谢大家!
declare
v_path nvarchar2(256);
v_object_exists number;
begin
-- Use the directory Oracle DB provide for tracing.
select VALUE into v_path from V$DIAG_INFO where NAME = 'Diag Trace';
--dbms_output.put_line(v_path);
--
我如何使用下面的代码创建过程,因为我是oracle的新手,所以总是使用sybase/ms,而且更容易。
DECLARE
temp VARCHAR2 (255);
last_val NUMBER(9, 0);
CURSOR c1 IS
SELECT DISTINCT table_name
FROM user_tab_cols
WHERE column_name = 'id';
BEGIN
FOR asd IN c1 LOOP
temp := asd.table_name;
我正在尝试创建多个PL/SQL脚本,以帮助维护我们现有的数据库,并允许我们对它们进行修改。我正在研究的第一个问题如下所示:
BEGIN
-- add the field to the table that will be used to check against when
-- looking for records that need to be processed.
EXECUTE IMMEDIATE('
ALTER TABLE TBL_SAP_VENDORS_COPY
ADD UPT_TS TIMESTAMP
我正在尝试创建oracle用户并使用循环授予连接。这就是我到目前为止所拥有的。
我得到一个错误的Encountered the symbol "USERID"。我想我需要以某种方式摆脱userid。
BEGIN
FOR USERNAME IN (SELECT USERID FROM SCHEMA.TABLENAME WHERE USERID NOT IN(SELECT NAME FROM USER$))
LOOP
EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME || ' IDENTIFIED BY
在下面的PL/SQL块中,WHERE子句中使用了bind变量:
declare
symbol varchar2(6) := 'EPIC';
begin
execute immediate 'delete from stock where symbol = :symbol'
using symbol;
end;
/
但是,这个块成功地执行,但是,下面这样的内容将失败:
declare
symbol varchar2(15) := 'employees';
begin
execute immediate 'delete from :symb
我正在通过SQL*Loader将文本文件导入到Oracle表中,但我不想给出文件的具体名称,我只想导入.txt文件扩展名。请看下面的代码:
create or replace
PROCEDURE EXT_TABLE
AS
A1 NUMBER ;
L_QUERY VARCHAR2(1000) := NULL;
L_DROP VARCHAR2(10000) := NULL;
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE IMPORT_TEST
( EMP_ID NUMBER (10)
)
ORGANIZATION EXTERNAL
( TYPE OR
我试图在PL/中运行下面的脚本,我得到了一个错误:'V_INSERT‘不是一个过程,或者是未定义的,这个语句被忽略了。
有人能帮忙吗?谢谢!
DECLARE chktime date; v_trunc varchar2(200); v_insert varchar2(200);
BEGIN
Select trunc(max(a.action_timestamp)) into chktime from hcr_dm.hcr_dm_fact a;
If chktime <> trunc(sysdate) then
v_trunc:='truncate table
我是甲骨文新手。我正在尝试使用HPDMA工具运行一个oracle脚本,该工具依次调用创建表模式的表创建脚本。我在其中一个脚本中得到以下错误:
Table MODEL
declare
*
ERROR at line 1:
ORA-00900: invalid SQL statement
ORA-06512: at line 46
下面是创建表的脚本:
SET DEFINE OFF;
Prompt Table MODEL;
declare
l_count int;
begin
select count(*)
into l_count
from al
您好,我使用oracle SQL developer。
我已经创建了一个过程,我需要检查表是否存在,如果不存在,我必须创建如何做?
我试过这个
DECLARE v_emp int:=0;
BEGIN
SELECT count(*) into v_emp FROM dba_tables;
if v_emp = 0 then
EXECUTE IMMEDIATE 'create table EMPLOYEE ( ID NUMBER(3), NAME VARCHAR2(30) NOT NULL)';
end if;
END;
但是给我一个错误00103,因为找
下面是运行良好的delete_import.bat文件,它包含以下内容:
sqlplus @C:\Exp_Imp_Util\delete_tmc.sql
deletetmc.sql文件包含我要删除的所有数据库对象。但是现在,每当我运行批处理文件时,它都应该创建所有delete语句的日志,如果删除sql语句时发生任何oracle错误,它也应该写入日志文件。
CONNECT TMC/TMC;
spool off
declare
stringa varchar2(100);
cursor cur is
select *
from user_objects;
begin
for c in cur
我有一系列的查询:
begin
execute immediate 'drop table mytable1';
exception when others then null;
end;
begin
execute immediate 'drop table mytable2';
exception when others then null;
end;
begin
execute immediate 'drop table mytable3';
exception when others then null;
end;
但是当我尝试在SQ
我想在oracle pl/sql语句中执行动态代码。
有效的方法是:
execute immediate 'begin :r := 3*7*(:aa); end;' using in out myresvar,100;
现在我想做得更一般化:
DECLARE
-- arbitrary formula to evaluate
formula VARCHAR2(100) := 'c+si/2.+mn/6.';
-- string variable to keep pl/sql-code
dynCall VARCHAR2(2046);
--
我是Oracle (11gr2)的新手,我有以下脚本:
BEGIN
DECLARE
source varchar2(1);
BEGIN
dbms_output.enable;
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW SP_AD;';
SELECT SOURCE INTO source FROM map_switch WHERE ROWNUM = 1;
IF source = 'A'
在执行下面的oracle存储过程时,我得到了一个不足的权限错误。我正在使用Oracle数据库10g速成版。
CREATE OR REPLACE
PROCEDURE sp_update_acounts(
accounts_file_dir IN VARCHAR2,
accounts_file_name IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ext_accounts_dir AS '''||accounts_file_dir||''
写了这个脚本:
static void schema()
{
Sql.newInstance(*DB_CONFIG, DB_DRIVER).execute('''
drop table if exists post;
drop table if exists author;
create table author(
id integer primary key,
name varchar(500)
);
create tabl
我有一个区块:
DECLARE
stmnt VARCHAR2(100);
rol VARCHAR2(10); --role name
tab_name VARCHAR2(10); --table name
BEGIN
rol := '&Role_name';
stmnt := 'create role ' || rol;
EXECUTE IMMEDIATE stmnt;
stmnt := 'grant :p on ' || '&tab_name' || ' to ' ||
我需要在Oracle上使用动态SQL执行,其中我不知道运行时之前SQL中使用的绑定变量的确切数量。
在对EXECUTE IMMEDIATE的调用中是否有方法使用绑定变量的变量数?
更具体地说,我需要将一个参数传递到未知的中,但我不知道在那里使用它的频率。
我试过
EXECUTE IMMEDIATE 'SELECT SYSDATE FROM DUAL WHERE :var = :var' USING 1;
但它又回到了ORA-01008: not all variables bound.
我的数据库是XE 18。我的用户有create,我可以在SQL中创建一个用户,使用以下内容:
ALTER SESSION SET "_ORACLE_SCRIPT" = true;
CREATE USER auxiliar IDENTIFIED BY auxiliar2020 ;
然后,我创建了一个包,该包的函数应该是动态创建用户,行如下:
EXECUTE IMMEDIATE 'alter session set "_ORACLE_SCRIPT"=true';
vSql := 'CREATE USER :1 IDENTIFIED BY
我正在尝试从过程中的用户表创建一个ORACLE用户。问题是我不知道如何调用特定的列。我试过用Camp.user.username之类的东西。
create or replace
PROCEDURE PR_USERPASS AS
BEGIN
UPDATE CAMP.USERS
SET USERNAME = (DBMS_RANDOM.string('x',15)), PASS = DBMS_RANDOM.string('x',12);
EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME ||
我有Oracle 11g。我想在已经存在的多个表中‘循环’这段代码,但我需要对4个表( t1,t2,t3,t1 t4)执行此操作:
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE t1';
EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION WHEN OTHERS THEN
IF SQLCODE !=-942 THEN
RAISE;
END IF;
END;
我可以手动更改它,但是代码会膨胀,我真的希望只控制它一次。:-)此外,表可能不会按顺序标记。提前谢谢你。
凯特
我有以下查询,它显示Oracle中缺少关键字的错误:
DECLARE
RESULT VARCHAR2(100);
n number;
BEGIN
for r in (SELECT TABLE_NAME FROM TST_REFRESH) LOOP
execute immediate 'select count(*) into n from ' || R.TABLE_NAME;
IF N = 0 THEN
dbms_output.put_line('Table Empty ' || r.TABLE_NAME);
我想要在循环中更新一个表,并且想要添加存储在临时变量中的值。部分代码如下所示:
SELECT SUM(CASE WHEN temp_atr_val = temp_val THEN net_sales_home ELSE 0 END) into temp_variable
FROM schemafinal_1;
EXECUTE IMMEDIATE 'ALTER TABLE SAR ADD ('||temp_name||' number)';
EXECUTE IMMEDIATE ' UPDATE SAR b
SET b.'||temp
下面是PL/SQL代码,我想从oracle数据库的groovy程序中运行。
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE Employee';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
我怎么才能拿到呢。我有所有的设置,比如从我的groovy程序连接到oracle数据库。我想做以下几件事:
sql = Sql.newInstance(url, username, password, driver)