扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
两个方法:
成都创新互联专业为企业提供东明网站建设、东明做网站、东明网站设计、东明网站制作等企业网站建设、网页设计与制作、东明企业网站模板建站服务,10年东明做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
1,重新创建一个表,然后创建一个序列,把老数据导入新表,删除老表,修改新表名字为老表
2,直接在原来表上增加一个字段,创建一个序列,通过更新的方式修改老数据的这个字段。
具体操作主要是2点,首先是创建一个序列名sequence;
然后是,insert语句的时候:将自增的字段的位置,写成序列名.nextval。
从创建表开始,然后创建sequence,到insert语句
1.首先创建表
CREATE TABLE "FLOWCAL"."T_USERINFO"
( "C_ID" NUMBER(*,0),
"C_USER" VARCHAR2(20 BYTE),
"C_PASSWORD" VARCHAR2(20 BYTE),
"C_ROLE" VARCHAR2(20 BYTE),
"C_COMMENT1" VARCHAR2(20 BYTE),
"C_COMMENT2" VARCHAR2(20 BYTE)
)
现在想让C_ID自增一。
2.首先创建一个oracle的sequence,sql语句如下:
create sequence 序列名
increment by 1
start with 1
maxvalue 999999999
cycle;
建立一个最小为1,最大为999999999的一个序列号会自动循环的序列
下面的sequence,如下:
CREATE SEQUENCE "FLOWCAL"."SEQ_USERINFO"
MINVALUE 0
MAXVALUE 9999999999999999999999999999
INCREMENT BY 1
START WITH 24
CACHE 20
ORDER
CYCLE ;
3.通过序列名.nextval实现插入时,字段的自增一
当向表中插入数据时,SQL语句写法如下:
SQL insert into 表名 values(,列1值,列2值,....);
"序列名"可以替换为自己需要的名字.
下面insert语句:
insert into T_USERINFO values(SEQ_USERINFO.NEXTVAL,'111','11','11','11','11')
ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数
这两个错误一般出现在利用代码循环执行数据库命令(例如将数据导入到数据库)时,例如在C#中
1)建立一个OracleConnection
2)循环创建OracleCommand,并执行数据导入
3)关闭OracleConnection
当第二步的循环数比较小时,代码运行正常。当循环数超过一定值(例如300),代码就会出错。提示:
ORA-01000: 超出打开游标的最大数
这是因为Oracle数据库中打开的游标最大数为一定值,例如300,当代码中第二步时, 循环中一个Command占用了一个数据库游标,执行的循环超过这个数时就会产生游标数目溢出错误。
解决办法:
第二步循环中中每次执行完OracleCommand,都将command.dispose()下,释放掉这个资源就好了
此外,也可以修改数据库的最大游标数,不过这个方法治标不治本。
不是十分明白你的意思,你是说写个C/C++程序来实现么?那将非常容易
1:创建个表,例如 number。可以在oracle里创建也可以用接口创建。
这是在oracle里创建create table number(NO number,... ...);这个参数我就不具体说了啊。
2:写程序。c语言用OCI,c++用occi。我用的occi
#include iostream
#define LINUXOCCI //避免函数重定义错误
#include occi.h
using namespace std;
using namespace oracle::occi;
int main()
{
//创建环境变量
//Environment
Environment *env = Environment::createEnvironment(Environment::OBJECT);
//username是oracle的用户名
//userpass是oracle的密码
//connstr是oracle的连接字符串
string username = "atc";
string userpass = "atc";
string connstr = "192.168.1.101:1521/utms";
//创建连接
//connection
Connection *conn = env-createConnection(username, userpass, connstr);
if(conn == NULL)
{
cout "access oracle failed..." endl;
return 0;
}
int count =0;
whlie(1)
{
//创建一个SQL语句的执行对象
//statement
Statement *st = conn-createStatement();
st-setSQL("insert into number values(count)");
st-executeUpdate();
n++;
if(n == 60)
break;
}
//关闭连接
env-terminateConnection(conn);
Environment::terminateEnvironment(env);
return 0;
}
理论上上面的代码就能实现你想要的,不过我当时写的是实现一个插入代码,我修改的没测试,你试试看,不行的话我还有批量操作的代码。你在站短我咱们在研究
1.首先装好10g 11g的数据库;
2.登陆数据库并创建用户;
开始--运行--sqlplus /nolog
conn /as sysdba
create user test identified by test;
grant resource,connect to test;
3.使用test(密码 test)用户账号登陆,并建立一张简单的表
create table test (id int,name char(10));
4.向该表插入数据
insert into test values (1,'yxd2766');
commit;
你也没给出个表名,临时给你写个例子,自己运行看看结果吧
建表
create table orders(oid varchar2(10),
price int);插入数据
insert into orders values ('1111',100);
insert into orders values ('1111',200);
insert into orders values ('2222',400);建立存储过程
create or replace procedure p_orders
(v_oid varchar2)
as
v_count int;
v_pirce int;
begin
select count(*) into v_count from orders where oid=v_oid;
if v_count=0
then
dbms_output.put_line('订单编号不存在');
else
select sum(price) into v_pirce from orders where oid=v_oid;
dbms_output.put_line('编号为'||v_oid||'的订单金额为'||v_pirce);
end if;
end;
执行1
begin
p_orders('3333');--括号里这个就是订单编号
end;这个执行结果是
执行2
begin
p_orders('1111');--括号里这个就是订单编号
end;
然后你自己再改改吧
插入数据分为两种情况,一种是用insert into ...values 的语法,一种是用insert into select ...的语法。
举例:
如test表中有如下数据:
插入一条id为6,name为杨七的数据。
insert into test values (6,'杨七');
commit;
此时表中数据为:
另,要求向表中复制一条目前表中id为1的数据,可用如下语句:
insert into test select * from test where id=1;
commit;
此时表中数据为:
注意:在执行insert语句后,必须提交,即commit,否则插入结果只在当前session有效,重新开启另外的session会插入不成功。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流