Oracle 外部表

--=================

-- Oracle 外部表

--=================

 

    外部表只能在Oracle 9i 之后来使用。简单地说,外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我们

可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问。外部表是对数据库表的延伸。

 

一、外部表的特性

    位于文件系统之中,按一定格式分割,如文本文件或者其他类型的表可以作为外部表。

    对外部表的访问可以通过SQL语句来完成,而不需要先将外部表中的数据装载进数据库中。

    外部数据表都是只读的,因此在外部表不能够执行DML操作,也不能创建索引。

    ANALYZE语句不支持采集外部表的统计数据,应该使用DMBS_STATS包来采集外部表的统计数据。

 

二、创建外部表的注意事项

    1.需要先建立目录对象

 

    2.对于操作系统文件的要求

        文件要有固定的格式、不能有标题列、访问时会自动创建一个日志文件

 

    3.在建立临时表时的相关限制

        对表中字段的名称存在特殊字符的情况下,必须使用英文状态的下的双引号将该表列名称连接起来。如采用”SalseID#”

        对于列名字中特殊符号未采用双引号括起来时,会导致无法正常查询数据。

        建议不用使用特殊的列标题字符

 

        在创建外部表的时候,并没有在数据库中创建表,也不会为外部表分配任何的存储空间。

        创建外部表只是在数据字典中创建了外部表的元数据,以便对应访问外部表中的数据,而不在数据库中存储外部表的数据。

        简单地说,数据库存储的只是与外部文件的一种对应关系,如字段与字段的对应关系。而没有存储实际的数据。

        由于存储实际数据,故无法为外部表创建索引,同时在数据使用DML时也不支持对外部表的插入、更新、删除等操作。

 

    4.删除外部表或者目录对象

        一般情况下,先删除外部表,然后再删除目录对象,如果目录对象中有多个表,应删除所有表之后再删除目录对象。

        如果在未删除外部表的情况下,强制删除了目录,在查询到被删除的外部表时,将收到"对象不存在"的错误信息。

        查询dba_external_locations来获得当前所有的目录对象以及相关的外部表,同时会给出这些外部表所对应的操作系统文件的名字。

           

    5.对于操作系统平台的限制

        不同的操作系统对于外部表有不同的解释和显示方式

        如在Linux操作系统中创建的文件是分号分隔且每行一条记录,但该文件在Windows操作系统上打开则并非如此。

        建议避免不同操作系统以及不同字符集所带来的影响

 

三、创建外部表

    使用CREATE TABLE语句的ORGANIZATION EXTENERAL子句来创建外部表。外部表不分配任何盘区,因为仅仅是在数据字典中创建元数据。

    1.外部表的创建语法

        create table table_name

            (col1 datatype1,col2 datatype2 ,col3 datatype3)

             organization exteneral

            (.....)

           

    2.由查询结果集,使用Oracle_datapump来填充数据来生成外部表

        a.创建系统目录以及Oracle数据目录名来建立对应关系,同时授予权限

            [oracle@oradb ~]$ mkdir -p /home/oracle/external_tb/data

       

            sys@ORCL> create or replace directory dat_dir as '/home/oracle/external_tb/data/';

 

            sys@ORCL> grant read,write on directory dat_dir to scott;

 

        b.创建外部表

 

            scott@ORCL> create table ex_tb1   --创建外部表

              2  (ename,job,sal,dname)        --表列描述,注意未指定数据类型

              3  organization external

              4  (

              5    type oracle_datapump       --使用datapump将查询结果填充到外部表,,此处由select生成,故不支持oracle_loader

              6    default directory dat_dir  --指定外部表的存放目录

              7    location('tb1.exp','tb2.exp')  --产生外部表的内容将填充到这些文件中

              8  )

              9    parallel                       --按并行方式来填充

             10  as

             11    select ename,job,sal,dname     -填充使用的原始数据

             12    from emp join dept

             13      on emp.deptno=dept.deptno;

 

        c.--验证外部表

            scott@ORCL> select * from ex_tb1;

 

            ENAME      JOB              SAL DNAME

            ---------- --------- ---------- --------------

            SMITH      CLERK            800 RESEARCH

            ALLEN      SALESMAN        1600 SALES

            WARD       SALESMAN        1250 SALES

            JONES      MANAGER         2975 RESEARCH

                     ..........

       

            对于使用上述方式创建的外部表可以将其复制到其他路径作为外部表的原始数据来生成新的外部表,用于转移数据。

           

    3.使用SQLLDR提供外部表的定义并创建外部表

        关于SQL*Loader的使用请参照:SQL*Loader使用方法

        我们使用SQL*Loader和下面的这个控制文件来生成外部表的定义

            [oracle@oradb ~]$ cat demo1.ctl

            LOAD DATA

            INFILE *

            INTO TABLE DEPT_NEW

            FIELDS TERMINATED BY ','

            (DEPTNO, DNAME, LOC )

            BEGINDATA

            10,Sales,Virginia

            20,Accounting,Virginia

            30,Consulting,Virginia

            40,Finance,Virginia

                       

            [oracle@oradb ~]$ sqlldr scott/tiger  control=demo1.ctl external_table=generate_only

 

        EXTERNAL_TABLE 参数有以下三个值:

            NOT_USED:默认值。

            EXECUTE:这个值说明SQLLDR不会生成并执行一个SQL INSERT语句;而是会创建一个外部表,且使用一个批量SQL语句来加载。

            GENERATE_ONLY:使SQLLDR 并不具体加载任何数据,而只是会生成所执行的SQL DDL DML 语句,并放到它创建的日志文件中。

   

        注:DIRECT=TRUE 覆盖EXTENAL_TABLE=GENERATE_ONLY。如果指定了DIRECT=TRUE,则会加载数据,而不会生成外部表。

 

        [oracle@oradb ~]$ cat demo1.log    --查看sqlldr产生的日志文件

 

        Table DEPT_NEW, loaded from every logical record.

        Insert option in effect for this table: INSERT

 

           Column Name                  Position   Len  Term Encl Datatype

        ------------------------------ ---------- ----- ---- ---- ---------------------

        DEPTNO                              FIRST     *   ,       CHARACTER           

        DNAME                                NEXT     *   ,       CHARACTER           

        LOC                                  NEXT     *   ,       CHARACTER           

 

        CREATE DIRECTORY statements needed for files   --创建一个目录

        ------------------------------------------------------------------------

        CREATE DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000 AS '/home/oracle/'

 

        CREATE TABLE statement for external table:     --生成创建外部表的命令

        ------------------------------------------------------------------------

        CREATE TABLE "SYS_SQLLDR_X_EXT_DEPT_NEW"

        (

          "DEPTNO" NUMBER(2),

          "DNAME" VARCHAR2(20),

          "LOC" VARCHAR2(20)

        )

        ORGANIZATION external                 --该子句表明是一个外部表 heap 对应普通表,index 对应iotexternal 对应外部表

        (

          TYPE oracle_loader                  --说明外部文件访问方式:oracle_loaderoracle_datapump(9i不支持)

          DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000   --指定外部文件的缺省目录

          ACCESS PARAMETERS                              --这个访问参数有些类似于sqlldr中控制文件中的描述信息

          (                                             --系统根据这些描述信息来生成外部表的格式

            RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII    --记录默认以换行符结束

            BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'demo1.bad'      --存放处理失败的记录文件描述

            LOGFILE 'demo1.log_xt'                                --日志文件

            READSIZE 1048576 --Oracle读取输入数据文件所用的默认缓冲区,此处为MB,如专用模式则从PGA分配,如共享模式则从SGA分配

            SKIP 6                                       --跳过的记录数,因为我们使用了控制文件,所以前面的控制信息需要跳过

            FIELDS TERMINATED BY "," LDRTRIM             --描述字段的终止符

            REJECT ROWS WITH ALL NULL FIELDS             --所有为空值的行被跳过并且记录到bad file.

            (                                            --下面是描述外部文件各个列的定义

              "DEPTNO" CHAR(255)

                TERMINATED BY ",",

              "DNAME" CHAR(255)

                TERMINATED BY ",",

              "LOC" CHAR(255)

                TERMINATED BY ","

            )

          )

          location

          (

            'demo1.ctl'                                --描述外部文件的文件名

          )

        )REJECT LIMIT UNLIMITED                        --描述允许的错误数,此处为无限制

 

        INSERT statements used to load internal tables:             --用于将数据填充到表,使用append方式

        ------------------------------------------------------------------------

        INSERT /*+ append */ INTO DEPT_NEW

        (

          DEPTNO,

          DNAME,

          LOC

        )

        SELECT

          "DEPTNO",

          "DNAME",

          "LOC"

        FROM "SYS_SQLLDR_X_EXT_DEPT"

 

        statements to cleanup objects created by previous statements:    --用于删除目录和外部表的定义信息

        ------------------------------------------------------------------------

        DROP TABLE "SYS_SQLLDR_X_EXT_DEPT_NEW"

        DROP DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000

 

    -----------------------------------------------------------------------------------------------------------------------

        sys@ORCL> grant create any directory to scott;

 

        sys@ORCL> grant drop any directory to scott;

 

        scott@ORCL> create table dept_new

          2  (deptno number,dname varchar2(20),loc varchar2(25));

 

        scott@ORCL> select * from dept_new;

 

        no rows selected

       

        [oracle@oradb ~]$ sqlldr scott/tiger control=demo1.ctl external_table=execute

 

        scott@ORCL> select * from dept_new;

 

            DEPTNO DNAME                LOC

        ---------- -------------------- -------------------------

                10 Sales                Virginia

                20 Accounting           Virginia

                30 Consulting           Virginia

                40 Finance              Virginia

 

    4.使用平面文件定义并生成外部表

        a.平面文件数据

            1.dat

                7369,SMITH,CLERK,7902,17-DEC-80,100,0,20

                7499,ALLEN,SALESMAN,7698,20-FEB-81,250,0,30

                7521,WARD,SALESMAN,7698,22-FEB-81,450,0,30

                7566,JONES,MANAGER,7839,02-APR-81,1150,0,20

 

            2.dat

                7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,0,30

                7698,BLAKE,MANAGER,7839,01-MAY-81,1550,0,30

                7934,MILLER,CLERK,7782,23-JAN-82,3500,0,10

 

        b.继续使用前面创建的目录/home/oracle/external_tb/data 来存放数据文件:

 

            sys@ORCL> select * from dba_directories;

 

            OWNER           DIRECTORY_NAME  DIRECTORY_PATH

            --------------- --------------- ---------------------------------------------

            SYS             DATA_PUMP_DIR   /u01/oracle/10g/rdbms/log/

            SYS             DAT_DIR         /home/oracle/external_tb/data/

           

            scott@ORCL> ho ls /home/oracle/external_tb/data/

            1.dat  2.dat  tb1.exp  tb2.exp

           

        c.创建外部表

            scott@ORCL> get /u01/bk/scripts/tb.emp_new

              1  create table emp_new

              2  (

              3      emp_id number(4),

              4      ename varchar2(15),

              5      job varchar2(12) ,

              6      mgr_id number(4) ,

              7      hiredate date,

              8      salary number(8),

              9      comm number(8),

             10      dept_id number(2)

             11  )

             12  organization external

             13  (

             14      type oracle_loader

             15      default directory dat_dir

             16      access parameters

             17    (

             18        records delimited by newline

             19        fields terminated by ','

             20    )

             21  location

             22      ('1.dat','2.dat')

             23* );

             

             scott@ORCL> start /u01/bk/scripts/tb.emp_new

 

        d.验证外部表  

            scott@ORCL> select * from emp_new;

 

                EMP_ID ENAME           JOB              MGR_ID HIREDATE      SALARY       COMM    DEPT_ID

            ---------- --------------- ------------ ---------- --------- ---------- ---------- ----------

                  7369 SMITH           CLERK              7902 17-DEC-80        100          0         20

                  7499 ALLEN           SALESMAN           7698 20-FEB-81        250          0         30

                                     ............................

               

            scott@ORCL> delete from emp_new where ename='SMITH';   --外部表不能执行DML

            delete from emp_new where ename='SMITH'

                        *

            ERROR at line 1:

            ORA-30657: operation not supported on external organized table

           

            scott@ORCL> insert into emp_new(emp_id,ename) select 8888,'Robinson' from dual;

            insert into emp_new(emp_id,ename) select 8888,'Robinson' from dual

                        *

            ERROR at line 1:

            ORA-30657: operation not supported on external organized table

                                       

      e.获得外部表的有关信息:

            scott@ORCL> col access_parameters format a35

            scott@ORCL> select owner,table_name,type_name,default_directory_name,access_parameters

              2  from dba_external_tables;

 

            OWNER      TABLE_NAME      TYPE_NAME                      DEFAULT_DIRECTO ACCESS_PARAMETERS

            ---------- --------------- ------------------------------ --------------- -----------------------------------

            SCOTT      EX_TB1          ORACLE_DATAPUMP                DAT_DIR

            SCOTT      EMP_NEW         ORACLE_LOADER                  DAT_DIR         records delimited by newline

                                                                                            fields terminated by ','

 

 

            SCOTT      EMP_PUMP        ORACLE_DATAPUMP                DAT_DIR         records delimited by newline

                                                                                            fields terminated by ','

  

      f.获得平面文件的位置,使用如下的查询:

            scott@ORCL> select * from dba_external_locations order by table_name;

 

            OWNER      TABLE_NAME      LOCATION        DIR DIRECTORY_NAME

            ---------- --------------- --------------- --- ------------------------------

            SCOTT      EMP_NEW         1.dat           SYS DAT_DIR

            SCOTT      EMP_NEW         2.dat           SYS DAT_DIR

            SCOTT      EMP_PUMP        1.dat           SYS DAT_DIR

            SCOTT      EMP_PUMP        2.dat           SYS DAT_DIR

            SCOTT      EX_TB1          tb2.exp         SYS DAT_DIR

            SCOTT      EX_TB1          tb1.exp         SYS DAT_DIR     

               

    5.外部表定义的进一步分析

        CREATE TABLE external_table

         (

            COL01 VARCHAR2(100),

                COL02 NUMBER,

                 ......

         )

        ORGANIZATION EXTERNAL

        (

            TYPE ORACLE_LOADER

            DEFAULT DIRECTORY "XXX"

            ACCESS PARAMETERS

                (

                RECORDS DELIMITED BY 0X'0A'

                SKIP 1

                BADFILE 'bad.txt'

                FIELDS TERMINATED BY ','

                OPTIONALLY ENCLOSED BY '"'

                LRTRIM MISSING FIELD VALUES ARE NULL

                REJECT ROWS WITH ALL NULL FIELDS

                )

            LOCATION

                ("CJ_DIR":'data.txt')

        )REJECT LIMIT UNLIMITED;

 

        外部表定义的几个重点

            a.ORGANIZATION EXTERNAL 关键字,必须要有。以表明定义的表为外部表。

            b.重要参数外部表的类型

                ORACLE_LOADER :定义外部表的缺省方式,只能只读方式实现文本数据的装载。

                ORACLE_DATAPUMP :支持对数据的装载与卸载,数据文件必须为二进制dump文件。可以从外部表提取数据装载到内部表,也

                    可以从内部表卸载数据作为二进制文件填充到外部表。

            c.DEFAULT DIRECTORY :缺省的目录指明了外部文件所在的路径

            d.LOCATION :定义了外部表的位置

            f.ACCESS PARAMETERS :描述如何对外部表进行访问

                RECORDS关键字后定义如何识别数据行  

                    DELIMITED BY 'XXX' ——换行符,常用newline定义换行,并指明字符集。对于特殊的字符则需要单独定义,

                        如特殊符号,可以使用OX'十六位值',例如tab(/t)的十六位是9,则DELIMITED BY 0X'09'

                        cr(/r)的十六位是d,那么就是DELIMITED BY 0X'0D'

                    SKIP X ——跳过X行数据,有些文件中第一行是列名,需要跳过第一行,则使用SKIP 1

                   

                FIELDS关键字后定义如何识别字段,常用的如下:

                    FIELDSTERMINATED BY 'x' ——字段分割符。

                    ENCLOSED BY 'x' ——字段引用符,包含在此符号内的数据都当成一个字段。

                    例如一行数据格式如:"abc","a""b,""c,"。使用参数TERMINATED BY ',' ENCLOSED BY '"'后,系统会读到两个字段,

                        第一个字段的值是abc,第二个字段值是a"b,"c,

                    LRTRIM ——删除首尾空白字符。

                    MISSING FIELD VALUES ARE NULL ——某些字段空缺值都设为NULL

 

                    对于字段长度和分割符不确定且准备用作外部表文件,可以使用UltraEditEditplus等来进行分析测试,如果文件较

                    大,则需要考虑将文件分割成小文件并从中提取数据进行测试。

       

        外部表对错误的处理

            REJECT LIMIT UNLIMITED

                在创建外部表时最后加入LIMIT子句,表示可以允许错误的发生个数。默认值为零。设定为UNLIMITED则错误不受限制

            BADFILE NOBADFILE 子句

                用于指定将捕获到的转换错误存放到哪个文件。如果指定了NOBADFILE则表示忽略转换期间的错误

                如果未指定该参数,则系统自动在源目录下生成与外部表同名的.BAD文件

                BADFILE记录本次操作的结果,下次将会被覆盖

            LOGFILE NOLOGFILE 子句

                同样在accessparameters中加入LOGFILE 'LOG_FILE.log'子句,则所有Oracle的错误信息放入'LOG_FILE.log'

                NOLOGFILE子句则表示不记录错误信息到log中,如忽略该子句,系统自动在源目录下生成与外部表同名的.LOG文件

 

        注意以下几个常见的问题

            1.外部表经常遇到BUFFER不足的情况,因此尽可能的增大READ SIZE

            2.换行符不对产生的问题。在不同的操作系统中换行符的表示方法不一样,碰到错误日志提示如是换行符问题,可以使用

                UltraEdit打开,直接看十六进制

            3.特定行报错时,查看带有"BAD"的日志文件,其中保存了出错的数据,用记事本打开看看那里出错,是否存在于外部表定义相冲突

           

四、更多参考

   

    Oracle 分区表

SQL*Loader使用方法

数据泵 IMPDP 导入工具的使用

数据泵 EXPDP 导出工具的使用

 

       

       

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LED32*32点阵书写屏设计方案

一、引言 目前LED显示屏都是采用字模软件生成好的字节序列然后进行显示,而LED点阵书写屏是一种无需通过字模软件编码即可给LED显示屏提供显示信息的一种新的交互方案,通过光敏二极管或光敏三极管在屏幕上捕获LED点阵的驱动信号,从而反馈至控制…

(C++)浅谈using namespace std

1、<iostream>和<iostream.h> 在你的编译器include文件夹里面可以看到&#xff0c;二者是两个文件&#xff0c;里面的代码是不一样的。 后缀为.h的头文件c标准已经明确提出不支持了&#xff0c;早些的实现将标准库功能定义在全局空间里&#xff0c;声明在带.h后缀的…

lpr命令linux下未找到,linux – LPR命令无法识别CUPS打印机

我有一个杯子服务器,上面配置了一台共享打印机.它可以毫无问题地打印测试页.printername (Idle, Accepting Jobs, Shared)Description: descLocation:Driver: Zebra ZPL Label Printer (grayscale, 2-sided printing)Connection: socket://172.20.50.26Defaults: job-sheetsnon…

Qt如何将数据保存成CSV文件

一、csv文件 csv文件是逗号分隔值&#xff08;Comma-Separated Values&#xff0c;CSV&#xff09;文件的缩写&#xff0c;其文件以纯文本形式存储表格数据&#xff08;数字和文本&#xff09;&#xff0c;各个字段用逗号进行分割&#xff0c;采用回车进行换行。由于采用纯文本…

windows 2003负载均衡故障切换

准备一个vip realserver 1 realserver 2 server1&#xff1a; IP:192.168.1.3 掩码:255.255.255.0 网关:192.168.1.254 server2: IP:192.168.1.4 掩码:255.255.255.0 网关:192.168.1.254   在server1上通过NLB管理器建立集群: 虚拟IP:192.168.1.111 掩码:255.255.255.0 网关:…

SecureCRT日志配置

SecureCRT设置 日志文件名&#xff1a; D:\Embedded\SecureCRT\SessionLog\%S__%Y-%M-%D_%h%m.log 连接时&#xff1a; [%Y%M%D %h:%m:%s] 在每行: [%h:%m:%s]

linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig

chkconfig --listchkconfig --level 3 network offchkconfig --level 345 network offchkconfig --del networkchkconfig --add networkchkconfig工具crond、iptables、firewalld、nginx、httpd、mysql等等&#xff0c;都属于服务。chkconfig工具&#xff0c;在centos6和之前的…

linux0.11文件分析

在kernel包中有几个重要的文件夹和文件&#xff0c;他们各司其职&#xff0c;处理着有关内核的一些功能操作。其中文件夹有三个&#xff1a;blk_drv(块设备驱动)&#xff0c;chr_drv(字符设备驱动)&#xff0c;math(数学协处理器) 文件中asm.s fork.c mktime.c panic.c p…

嵌入式开发过程中结构体字节对齐问题pragma pack(1)

一、引言 曾经刚入门嵌入式在开发一个应用时&#xff0c;用到了自定义结构体&#xff0c;底层嵌入式单片机运行该结构体没问题&#xff0c;但是在Qt开发应用软件对接协议时&#xff0c;一直通不过&#xff0c;仔细分析才发现是QT这边的结构体字节并没有按照单字节对齐&#xf…

Exchange2003-2010迁移系列之二,迁移前的准备工作(上)

Exchange2010迁移前的准备工作&#xff08;上&#xff09; 上篇博文发出后&#xff0c;很多博友支持得非常给力&#xff0c;在此一并谢过&#xff01;也有一些博友反映看得不是很明白&#xff0c;但仍然支持…..本文中首先就环境问题再为大家解释一下&#xff0c;然后介绍如何进…

BMP图像文件格式分析附带图解

From: http://www.raidcn.com/js/BMPTuXiangWenJianGeShiFenXiFuDaiTuJie.html 认识BMP文件格式&#xff0c;以及bmp文件存储结构 &#xff0c;通过winhex查看文件结构解析。 一、认识BMP文件格式. 1、 BMP格式是由微软公司开发。通常BMP图像文件的后缀名是BMP&#xff0c;但…

matlab安装MinGW-64代码C/C++编译器的方法

一、说明 matlab中编写的m文件转成C/C代码&#xff0c;以及matlab中执行C/C带啊&#xff0c;需要用到mex 查看matlab是否支持可以输入mex -setup&#xff1a; 二、安装 如果不支持&#xff0c;没找到&#xff0c;则需要重新安装&#xff0c;下载地址&#xff1a;http://tdm-…

mybatis+spring+c3p0+maven+ehcache

项目截图 pom.xml如下 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

windbg linux内核调试,windbg调试虚拟机XP系统

一、先介绍一下被调试的虚拟机系统环境:虚拟机:vmware workstation 10.0版本虚拟机操作系统: Microsoft windows xp professional 2002 service pack3cpu:2.8GHz,2.64GB内存二、这个没有直接关系。做个笔记而已。1.在XP系统中&#xff0c;创建了一个first.c文件测试代码如下:#i…

VC屏幕截图,保存为Bmp文件

新建一个MFC基于对话框的应用程序&#xff0c;在界面上放一个Button&#xff0c;为其实现点击事件&#xff0c;代码如下&#xff1a; void CScreenShotDlg::OnBtnScreenshot() {RECT rect {0, 0, 1900, 1000};HBITMAP hbmp CopyScreenToBitmap(&rect);SaveBitmapToFile(h…

C#反射技术在多语言实现中的实际用处参考,让初学者学技术有个针对性【附源码】...

做软件&#xff0c;有点儿类似铁人三项比赛&#xff1f;赛跑、射击、游泳? 光某个环节突出&#xff0c;也没多大用&#xff0c;需要整体能力都强&#xff0c;能把整体都可以搞定&#xff0c;才容易得到比赛的胜利&#xff0c;光某一环节非常优秀&#xff0c;也赢得不来整个比…

C语言中的格式化打印printf/sprintf以及嵌入式printf重定向进行DEBUG

一、printf描述 在C语言中&#xff0c;打印函数主要包括printf/sprintf/fprintf/snprintf等等&#xff0c;目的是将“给定的内容”按照“指定的格式”输出到“指定目标内”。通常要使用时&#xff0c;需要包括#inlcude <stdio.h>头文件。 用法为&#xff1a;void print…

华为网卡支持linux,在openwrt下对华为WA633无线AP的千兆网卡驱动进行支持

1.下面是这款AP的全裸图&#xff0c;AP的无线网卡采用了AR9223&#xff0c;PHY采用了博通的BCM5461&#xff0c;主控CPU位octeon 500&#xff0c;射频功放采用的是RF5602方案。由于这款CPU并不常见&#xff0c;我至今未在网上找到它的datasheet&#xff0c;导致我们在玩这款AP的…