热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

10月的一些知识点

Oracle导入导出文本数据表结构--CreatetablecreatetableSTUDENT(SNONUMBER,NAMEVARCHAR2(12))1.spool导出数

Oracle导入导出文本数据

 

表结构

-- Create table
create table STUDENT
(
  SNO  NUMBER,
  NAME VARCHAR2(12)
)

 

1. spool导出数据的使用

使用spool命令导出数据

--sp.sql

 

set echo off

set trimspool on

set linesize 900

set pagesize 200

set heading off

set feedback off

set term off

spool data.txt

 

select sno||','||name from student ;

 

spool off

/

 

E:/test>sqlplus sun/sun

 

SQL> @sp

 

--data.txt

1,李雷

 

2. sqlldr导入数据的使用

in.txt 中的数据导入到表student中

Load.ctl

 

LOAD DATA

INFILE 'in.txt'

append INTO TABLE student

 

FIELDS TERMINATED BY ','

TRAILING NULLCOLS

(

name,

FILLER_1 FILLER, -- 过滤

sno

--  EFF_DATE   date  "yyyy-mm-dd hh24:mi:ss"    日期格式

)

 

select * from student

SNO       NAME

1                            李雷

 

 

在命令行中执行

E:/test>sqlldr sun/sun cOntrol=load.ctl

 

SQL*Loader: Release 11.1.0.6.0 - Production on 星期三 5 12 15:24:42 2010

 

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

 

达到提交点 - 逻辑记录计数 1

达到提交点 - 逻辑记录计数 2

 

E:/test>

 

in.txt

韩美美,hmm,2

Mary,mm,3

 

select * from student;

SNO       NAME

1     李雷

2     韩美美

3     Mary

 

实现了数据的插入,以及字段的过滤,字段的对应顺序

 

----------

安装数据库 dbname test
安装有问题
新建数据库,sqlnet.ora中注释#SQLNET.AUTHENTICATION_SERVICES= (NTS)

tnsping test
发现是环境变量path有问题,修改

oci程序,添加include,添加lib

#if defined(WIN32)
#pragma comment(lib,"oci.lib")
#endif

8-30


------
9-1

头文件问题

text * sql = (text*)"insert into part_nos values(:description,:partno)";
obndra

ORA-01484: 数组仅可以与 PL/SQL 语句关联
processing oci function OEXEC, OEXN

-------
9-3
封装

初步实现绑定数据批量插数据到数据库

---
9-7

由于是常驻进程,注意检查数据库的连接状态,在连接断开时,可以再次连接

----
9-8
进行查询的时候,整型若为NULL,取其值则为0

-----
9-16

INSTALL_PATH = /home/gmdb/database/gmdb

使用GMDB,在makefile中调用提供的库就可以了,注意看其用法
利用客户端查看结果

可以创建索引,对索引的功效进行测试验证

9-19

GMDB的一些问题

delete的时候不需要显式的commit就可以提交,update的时候需要

直接在客户端进行rollback commit 无效
可能是设置了自动提交,把自动提交关闭

一个连接中insert可以多次执行,select就不行,报错
stmt关联conn的时候,超过一定的数量后报错
发现原因时没有释放   DB_SqlStmtFree(&stmt);
------
之前的oci程序 批量插入数据没有问题
insert into test9 nologging (ID)  values(1);
写错了
写成了 insert into test9 (ID) nologging  values(1);
sql报错

-------
9-28

看oci8里的函数,在select的时候取字段值有问题
发现是类型参数设置的问题

    char c[] = {0,0,0,1};
    cout <<*((int*)c) <
    char str[8] = {0};
    *((int*)str) = 1;// 01 00 00 00
    cout <<*((int*)str) <   
    cout <
    char* v[2];
    v[0] = new char[8];
    cout <
9-29
一个需求,从GMDB中导出数据到文件中,再导入到Oracle
如果直接在内存中进行对接实现数据传输,不IO到文件中,处理速度会快些,但是出错后再次处理会比较麻烦

---
9-30
分别实现了数据导出,数据导入功能

文件不能有空行
oci@ATAE1:~/tdb/test>
oci@ATAE1:~/tora/bin>

问题:读配置 写日志 整合  性能测试 安全性测试

--
10-8
读文件到变量中
#include
#include
#include

int main()
{
    char filename[] = "c.txt";
    char str[32] = {0};
    int a, b;

    ifstream infile(filename);
    infile >> str;
    infile >> a;
    infile >> b;
    cout <
    return 0;
}

--
10-9
修改程序,使可以插入空字段

#include
system("ls");
调用系统命令

---
10-11
在程序中调用
system("ls");

程序将顺序执行,system("ls");命令执行好了后再继续往下

mv c dat.txt
会覆盖之前的文件,如果存在的话

200机器不能通过ftp访问,但可以使用ftp访问其他的机器,可以这样mput上传文件作中转

----
程序参数
#include

int main(int argc, char** argv)
{
    cout <    cout <   
    return 0;
}

oci@ATAE1:~/tdb/test> ./targc 11 22
3
./targc 11
oci@ATAE1:~/tdb/test>


-------
10-12

导入数据到表时,为了保证导入数据的可靠性,需要使用一个配置文件进行标识

--
GMDB客户端程序测试,把include lib so 文件加入 ,还要加入so路径到环境变量中

xby@BI01:~/sunyu/src/gmdb> cat env
export

LD_LIBRARY_PATH=/opt/mqm/lib64:/home/xby/lib:/opt/ODBC/lib::/home/oracle/oracle/app/oracle/product/11.1.0/db_1/lib:/

home/xby/sunyu/src/database/gmdb/lib::/home/xby/sunyu/src/database/gmdb/so

执行
. ./env

---
10-13

启动机器上的ftp服务
1。查看是否安装了vsFTPd软件
  [root@linuxsir001   root]#   rpm   -qa   |   grep   vsftpd
  如果没有任何显示,说明没有把vsFTPd安装上,如果出现的是下面的这样的提示,就证明已经安装上了。
  
  [root@linuxsir001   root]#   rpm   -qa   |   grep   vsftpd
  vsftpd-1.1.3-8
  
  我以Redhat   9.0,以其自带的vsFTPd包vsftpd-1.1.3-8版本来为本帖约定。
  
  [root@linuxsir001   root]#   rpm   -ivh   vsftpd*.rpm  
  
  2。打开vsFTPd服务器。
  
  [root@linuxsir001   root]#   ntsysv
  
  把vsftpd服务器打开,也就是在运行
上网机(上网机) 10:26:01
   ntsysv命令后,把vsftpd服务选中。
  
  

  •    vsftpd  
      
      3。运行/etc/init.d/vsftpd   start
      
      [root@linuxsir001   root]#   /etc/init.d/vsftpd   start
      为   vsftpd   启动   vsftpd:   [   确定   ]
      [root@linuxsir001   root]#

    再编译程序,执行,就可以了


    1.修改/etc/vsftpd.conf将里面的write_enable=yes,anonymous_enable=yes,local_login=yes.

      2./etc/inetd.conf将里面关于ftp的两行的注释去掉。

      3.将/etc/ftpusers中不能出现将来要登录的帐户名。


    service vsftpd start

    ---------
    10-14

    oracle@bi0001:~> cd
    oracle@bi0001:~> vi .bash_profile

    LANG=c#

    ORACLE_HOME=/oracle/app/oracle/product/11.1.0/db_1; export ORACLE_HOME
    ORACLE_SID=orcl; export ORACLE_SID
    NLS_LANG=american_america.ZHS16GBK; export NLS_LANG
    ORA_NLS33=$ORACLE_HOME/nls/data; export ORA_NLS33
    LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
    PATH=$PATH:/bin:/usr/bin:/etc
    PATH=$PATH:$ORACLE_HOME/bin
    export PATH
                         
    oracle@bi0001:~> pwd
    /opt/oracle

    --
    添加到root用户的/etc/profile 文件中
    bi0001:/etc # ls

    bi0001:/etc # vi profile
    bi0001:/etc # source profile

    ---
    查看数据库
    show parameter DB_NAME


    ---
    打包
     tar -cvf tto.tar tora
    解包
    tar -xvf tto.tar



    LD_LIBRARY_PATH=/oracle/app/oracle/product/11.1.0/db_1/lib
    LD_LIBRARY_PATH是系统设定的路径变量

    ----
    10-15

    指令名称 : chown
      使用权限 : root
      使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
      说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown
      可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)
      所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己
      的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

    chown -R 递归改变
    ----
    10-18
    ps -fau uname
    显示用户uname下的进程信息

    应该是 ps -fu uname

    在root用户下 sqlplus /  as sysdba
    没有权限
    ORA-01031: insufficient privileges

    在oracle用户下可以

    --
    关闭数据库
    SQL>shutdown immediate;
    启动
    SQL>startup

    ---
    10-19
    新创建的用户必须要这样赋权才可以连接使用
    SQL> grant connect,resource to test;

    Grant succeeded.

    ---
    export LD_LIBRARY_PATH=/usr/local/lib:/oracle/app/oracle/product/11.1.0/db_1/lib

    在数据导出大整数,小数,出现问题时,可以考虑使用to_char 转换成字符串来处理
    应该直接使用col->value->data,不作下面的转换
     sprintf(pucStr, "%f", *(double *)col->value->data);
    ----
    导入数据时
    01:02:51.22
    01:02:57.106
    6秒导入16万条数据,没有索引的情况下

    ---
    10-20
    修改程序
    //2010-10-20
        case DB_SQL_T_DECIMAL:
            sprintf(pucStr, "%s", col->value->data);
            break;

        case DB_SQL_T_DOUBLE:
            //测试时注意小数是否可以正确输出
            sprintf(pucStr, "%f", *(double *)col->value->data);
            break;

    --
    10-21
    在gdb调试程序时,set args 来设置程序输入参数



            sprintf(str, "%sde", str);
        cout <<"abc%s = " <

    对其自身进行复制,很危险
        sprintf(str, "abc%sde", str);
        cout <<"abc%s = " <
    ------
    字段对应表添加字段 字段程度 字段序号


    ---
    10-25

    oracle clob类型的使用
    在insert语句里字符串的长度有限制

  • 推荐阅读
    • 本文探讨了在Oracle数据库中,动态SQL语句的执行及其对事务管理的影响,特别是关于回滚操作的有效性。重点讨论了一个具体场景:将预警短信从当前表迁移到历史表时遇到的字段长度不匹配问题及相应的异常处理。 ... [详细]
    • MySQL索引详解与优化
      本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
    • 深入理解 SQL 视图、存储过程与事务
      本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
    • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
    • 利用存储过程构建年度日历表的详细指南
      本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
    • openGauss每日一练:第6天 - 模式的创建、修改与删除
      本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
    • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
    • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
    • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
    • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
    • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
    • Windows服务与数据库交互问题解析
      本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
    • 深入理解 Oracle 存储函数:计算员工年收入
      本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
    • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
    • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
    author-avatar
    小宋提刑官_783
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有